我正在尝试在gitlab ci管道中构建我的docker映像。
但是它找不到docker命令。
/ bin / bash:第69行:docker:找不到命令错误:作业失败:错误 执行远程命令:命令以非零退出代码终止: 在Docker容器中执行时出错:1
.gitlab-ci.yml
stages:
- quality
- test
- build
- deploy
image: node:8.11.3
services:
- mongo
- docker:dind
before_script:
- npm install
quality:
stage: quality
script:
- npm run-script lint
test:
stage: test
script:
- npm run-script test
build:
stage: build
script:
- docker build -t server .
deploy:
stage: deploy
script:
- echo "TODO deploy push docker image"
答案 0 :(得分:3)
您需要选择包含docker binaries的映像
image: gitlab/dind
services:
- docker:dind
答案 1 :(得分:2)
这里的问题是节点docker映像没有嵌入docker二进制文件。
两种可能性:
将阶段拆分为两个作业。一种使用节点映像进行质量和测试,另一种使用docker映像进行构建和部署。参见jobs documentation。
构建一个同时嵌入节点和docker的自定义docker映像,并使用该映像来构建您的仓库。
请注意,在两种情况下,您都必须在代理中启用docker。参见documentation。
答案 2 :(得分:0)
Hieu Vo的补充
image: docker:latest
stages:
- build
- release
services:
- docker:dind
答案 3 :(得分:0)
您有 2 个选项可以解决此问题。您需要编辑 config.toml 文件(位于您安装 gitlab runner 的任何位置)。
选项 1
在 config.toml 中:
privileged = true
在 .gitlab-ci.yml 中:
myjob:
stage: myjob
image: docker:latest
services:
- docker:18.09.7-dind # older version that does not need demand TLS (see below)
选项 2
在 config.toml 中:
privileged = true
volumes = ["/certs/client", "/cache"]
在 .gitlab-ci.yml 中:
myjob:
stage: myjob
image: docker:latest
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay2 # not sure if this is needed
DOCKER_TLS_CERTDIR: "/certs"
重要提示:一旦您对 config.toml 进行了更改,您可能需要重新启动 GITLAB RUNNER(这可能因操作系统而异)-我确实重新启动了我的,不确定如果您不重新启动它会发生什么!
重新启动 gitlab runner 的说明在这里... https://docs.gitlab.com/runner/commands/ ... 基本上是 gitlab-runner restart
但在 Windows 上我必须使用 Windows“服务”来重新启动它
为什么会出现这个问题?
priviledged=true
摆脱了 docker: command not found 问题
但是,docker:dind
现在需要 TLS 证书(无论它们是什么)。如果您对较旧的 docker 版本感到满意,那么您可以使用选项 1。如果您想要最新版本,则需要设置 Gitlab CLI 以使用它们,即选项 2。J.E.S.U.S 爱你 :)
欲了解更多信息... https://about.gitlab.com/blog/2019/07/31/docker-in-docker-with-docker-19-dot-03
答案 4 :(得分:0)
要在 CI/CD 作业中运行 Docker 命令,您必须配置 GitLab Runner 以启用 docker 支持。
欲了解更多信息,请阅读本教程: https://www.javatuto.com/docker/solution-for-gitlab-ci-docker-command-not-found/