docker Gitlab CI-对接器:未找到命令

x33g5p2x  于 2023-01-04  发布在  Docker
关注(0)|答案(3)|浏览(215)

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

13z8s7eq1#

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

image: gitlab/dind

services:
  - docker:dind
k97glaaz

k97glaaz2#

你有两种方法来修复这个问题,你需要编辑你的config.toml文件(位于你安装gitlab runner的地方)。
备选案文1
在配置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
在配置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:dind现在需要TLS证书(不管它们是什么)。如果你对旧的Docker版本很满意,那么你可以使用选项1。如果你想要最新的,你需要设置Gitlab CLI来使用它们,这就是选项2。JidoEidoSidoUidoss爱你:)
更多信息... https://about.gitlab.com/blog/2019/07/31/docker-in-docker-with-docker-19-dot-03

rvpgvaaj

rvpgvaaj3#

这里的问题是节点Docker映像没有嵌入Docker二进制文件。
两种可能性:

  • 将阶段拆分为两个作业。一个使用节点映像进行质量和测试,一个使用Docker映像进行构建和部署。请参见jobs documentation
  • 构建一个嵌入节点和Docker自定义Docker映像,并使用该映像构建您的存储库。

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

相关问题