Gitlab CI-泊坞窗:找不到命令

时间:2018-07-05 16:50:16

标签: docker gitlab gitlab-ci

我正在尝试在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"

5 个答案:

答案 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/