【问题标题】:Docker not available in GitLab CI runner containerDocker 在 GitLab CI 运行器容器中不可用
【发布时间】:2025-12-16 14:50:02
【问题描述】:

我正在尝试使用 digitallumberjack 提供的 GitLab CI 运行器,因为它支持在容器内使用 Docker 命令。

GitLab CI 运行脚本:

docker run --name gitlab-ci-multi-runner -d --restart=always \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --volume /mnt/data/gitlab/gitlab-runner:/home/gitlab_ci_multi_runner/data \
  --env='CI_SERVER_URL=https://gitlab.dev.abc.net/ci' --env='RUNNER_TOKEN=RijUZPnMjGeNF2JYt' \
  --env='RUNNER_DESCRIPTION=runnerA' --env='RUNNER_EXECUTOR=docker' \
  --env='RUNNER_DOCKER_IMAGE=docker:17.07.0-ce' --env='RUNNER_DOCKER_MODE=socket' \
  --link gitlab.dev.abc.net \
  digitallumberjack/docker-gitlab-ci-multi-runner:v9.3.0-1

.gitlab-ci.yml内容:

image: node:6.11

types:
        - build
        - deploy

build_app:
        type: build
        script: "bash chmod +x ./configure_proxy_artifactory.sh"
        script: "bash ./configure_proxy_artifactory.sh"

但是,当 GitLab CI 构建运行时,我在运行器日志中收到以下错误:

./configure_proxy_artifactory.sh: line 13: docker: command not found

似乎 Docker 仍然没有配置上述运行脚本。知道如何解决这个问题吗?

更新:在容器内,这是我的观察:

root@5489eb3ebe42:/home/gitlab_ci_multi_runner# ls -l /var/run/docker.sock
srw-rw---- 1 root docker 0 Jul 21 00:53 /var/run/docker.sock
root@5489eb3ebe42:/home/gitlab_ci_multi_runner# docker ps
bash: docker: command not found

【问题讨论】:

  • 你能访问容器并做一个 docker ps 吗?并查看 /var/run/docker.sock 是否存在以及它具有什么权限
  • @Sergiu:请查看我帖子中的UPDATE

标签: docker gitlab gitlab-ci gitlab-ci-runner


【解决方案1】:

我不确定你为什么不使用官方的 Gitlab Runner 镜像:gitlab/gitlab-runner:latest 但我相信这只是一个偏好问题,我也建议你也应该传递 --privileged 标志看看有没有帮助。

【讨论】:

  • 即使添加了--privileged 标志,错误仍然存​​在。 :( 目前,我正在使用作为 Docker 容器运行的官方 Omnibus GitLab。但是,我将很快将其移至 Kubernetes。在 Kubernetes 中,我将为 GitLab、Redis 和 Postgres 使用单独的容器。为此,我已经测试了 @987654321 @ 图像。我想使用这些只是为了确保不会出现兼容性问题。另外,我认为即使 GitLab 的官方运行器也不提供 Docker 访问权限,不是吗?
  • 好吧,我已经使用了与 /var/run/docker.sock 或多或少相同的配置的图像,然后我正在安装数据卷,所以我不需要传递变量在运行时。 Runner01:特权:真实图像:gitlab/gitlab-runner:latest stdin_open:真实卷:-/var/run/docker.sock:/var/run/docker.sock-/data/runner/config:/etc/gitlab- runner - /data/gitlab/runner/data:/data tty: true 标签:io.rancher.container.pull_image: always io.rancher.scheduler.global: 'true'
  • 如您所见,我一直在使用 Rancher 来启动我的 Gitlab 服务器和运行器 :) 我希望这会有所帮助
  • 是的,关于 DIND 以及你应该如何使用它的意见不一,我记得读过一篇文章说 Docker 不好等等,但现在很普遍,越来越多的组织正在实施它.我相信这是个人/公司选择和使用方式的问题。
  • 好吧,我同时使用套接字和 DIND cz 如果您尝试在管道中构建映像将失败,它会说您没有安装 Docker。至于我使用 vfs 的驱动程序 :) 是的,我在 RancherOS 上使用 Rancher,但不是必须的。