无法在gitlab-ci runner上运行docker最新版本

时间:2018-01-11 18:41:22

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

我正在测试gitlab-ci并试图从Dockerfile在注册表上生成一个图像。

我有相同的代码只是为了测试:

#gitlab-ci 
image: docker:latest

tages:
  - build
  - deploy

build_application:
  stage: build
  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . -f Dockerfile
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-test

输出:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

docker正在运行正在拉动图像但我无法执行docker命令。

在我的本地环境中运行:

docker run -it docker:latest

我留在容器内并运行docker info我有同样的问题。我必须通过以这种方式运行容器来修复它:

docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock docker:latest

但我不知道如何在gitlab-ci上修复它。我配置了我的跑步者:

docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

也许有人可以让我朝着正确的方向前进。 感谢

1 个答案:

答案 0 :(得分:4)

通过default,无法运行docker-in-docker(DIND)(作为安全措施)。

Gitlab文档中的

This section是您的解决方案。您必须使用Docker-in-Docker。

配置跑步者使用DIND后,.gitlab-ci.yml将如下所示:

#gitlab-ci 
image: docker:latest

variables:
  DOCKER_DRIVER: overlay2

services:
- docker:dind

before_script:
- docker info

stages:
  - build
  - deploy

build_application:
  stage: build
  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . -f Dockerfile
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-test