【问题标题】:Gitlab CI - docker: command not foundGitlab CI - docker:找不到命令
【发布时间】:2018-12-14 05:43:46
【问题描述】:

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

【问题讨论】:

  • 这似乎建议不要将 DinD 用于一般 CI 目的jpetazzo.github.io/2015/09/03/… 可能会尝试遵循该过程并完全避免这成为一个问题
  • @Thymine 建议的替代方法是在启动“外部”容器时挂载 docker 套接字,这在 gitlab-ci 中无法做到。

标签: docker gitlab gitlab-ci


【解决方案1】:

您有 2 个选项来解决此问题。您需要编辑 config.toml 文件(位于安装 gitlab 运行器的任何位置)。

选项 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

【讨论】:

  • 您好!一个问题,我检查了我的 gitlab/certs 文件夹,那里什么都没有。这是预期的吗?我直接使用 Gitlab.com,没有任何自托管,那么我应该使用什么证书?预先感谢您和问候。
  • 如果我没记错的话...... gitlab runner 在你的机器上运行并在你的机器上创建 certs 文件夹。如果这不是您设置的方式,那么我不确定这个答案对您有多大用处。
  • 谢谢!这就是我所理解的,但它没有发生。我已经尝试在 Gitlab 论坛上提问,甚至在 tracket 中提出了一个问题,但回复为零......无论如何,我会继续挖掘
【解决方案2】:

你需要选择一个包含 docker 二进制文件的镜像

image: gitlab/dind

services:
  - docker:dind

【讨论】:

  • Gitlab/dind 已弃用(最后一次更新是 5 年前)。应该使用官方的 docker dind 镜像(仅称为“docker”)
【解决方案3】:

这里的问题是节点 docker 镜像没有嵌入 docker 二进制文件。

两种可能:

  • 将阶段拆分为两个作业。一种使用节点映像进行质量和测试,一种使用 docker 映像进行构建和部署。见jobs documentation

  • 构建一个嵌入节点和 docker 的自定义 docker 镜像,并使用该镜像构建您的 repo。

请注意,在这两种情况下,您都必须在代理中启用 docker。见documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2017-11-28
    • 2020-06-02
    • 1970-01-01
    相关资源
    最近更新 更多