docker:在gitlab-ci中找不到命令

时间:2020-11-03 17:14:46

标签: docker gitlab gitlab-ci

背景

我正在gitlab-ci文件中尝试构建docker映像,但是即使我将docker:dind作为服务,它仍会失败。

.gitlab-ci

---
stages:
  - build
  - docker

build:
  stage: build
  image: fl4m3ph03n1x/my-app:1.0
  variables:
    MIX_ENV: prod
  script:
    - mix deps.get
    - mix deps.compile
    - mix compile
  artifacts:
    paths:
      - .hex/
      - _build/
      - deps/
      - mix.lock

build_image:
  stage: docker
  image: fl4m3ph03n1x/my-app:1.0
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
    DOCKER_HOST: tcp://docker:2375/
  services:
    - docker:dind
  script:
    - echo ${CI_JOB_TOKEN} | docker login --password-stdin -u ${CI_REGISTRY_USER} ${CI_REGISTRY}
    - docker build . -t ${CI_REGISTRY_IMAGE}:latest
    - docker push ${CI_REGISTRY_IMAGE}:latest

有问题的阶段是docker。 如您所见,我正在尝试:

  1. 登录docker
  2. 从gitlab的注册表中构建映像
  3. 推送该图片

错误

但是,出现以下错误:

$ echo $ {CI_JOB_TOKEN} | docker登录--password-stdin -u $ {CI_REGISTRY_USER} $ {CI_REGISTRY} / bin / bash:第110行:docker: 找不到命令

这令人困惑,因为docker:dind实际上可以防止这种情况的发生:

https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#enable-registry-mirror-for-dockerdind-service

问题

很显然,我在这里错过了一些东西。我在做什么错了?

编辑

这是我的Dockerfile

FROM elixir:1.10

# Install Hex + Rebar
RUN mix do local.hex --force, local.rebar --force

COPY . /
WORKDIR /

ENV MIX_ENV=prod
RUN mix do deps.get --only $MIX_ENV, deps.compile
RUN mix release

EXPOSE 8080
ENV PORT=8080
ENV SHELL=/bin/bash

CMD ["_build/prod/rel/my_app/bin/my_app", "start"]

1 个答案:

答案 0 :(得分:1)

image用于指定运行脚本的图像。您想在docker图片中运行脚本,以构建图片。

image关键字是Docker执行程序运行以执行CI任务的Docker映像的名称。

https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#define-image-and-services-from-gitlab-ciyml

毕竟,这不是您的应用程序映像CI_REGISTRY_IMAGE吗?您不想自己构建图像。

    - docker build . -t ${CI_REGISTRY_IMAGE}:latest
    - docker push ${CI_REGISTRY_IMAGE}:latest