我正在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
。
如您所见,我正在尝试:
但是,出现以下错误:
$ echo $ {CI_JOB_TOKEN} | docker登录--password-stdin -u $ {CI_REGISTRY_USER} $ {CI_REGISTRY} / bin / bash:第110行:docker: 找不到命令
这令人困惑,因为docker:dind
实际上可以防止这种情况的发生:
很显然,我在这里错过了一些东西。我在做什么错了?
这是我的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"]
答案 0 :(得分:1)
image
用于指定运行脚本的图像。您想在docker
图片中运行脚本,以构建图片。
image关键字是Docker执行程序运行以执行CI任务的Docker映像的名称。
毕竟,这不是您的应用程序映像CI_REGISTRY_IMAGE
吗?您不想自己构建图像。
- docker build . -t ${CI_REGISTRY_IMAGE}:latest
- docker push ${CI_REGISTRY_IMAGE}:latest