Gitlab CI-使用Shared Runner构建Docker镜像(无法连接到Docker Daemon)



我目前正在使用Gitlab Shared Runners来构建和部署我的项目(至少我也在尝试!(。

我有下面的gitlab-ci.yml:

image: java:8-jdk
stages:
- build
- package
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
- docker info
cache:
paths:
- .gradle/wrapper
- .gradle/caches
build:
stage: build
script:
- ./gradlew build
artifacts:
paths:
- build/libs/*.jar
expire_in: 1 week
only:
- master
docker-build:
image: docker:stable
services:
- docker:dind
stage: package
script:
docker build -t registry.gitlab.com/my-project .
docker push registry.gitlab.com/my-project
after_script:
- echo "End CI"

首先,构建阶段做得很好,但当我试图构建和推广我的docker形象时,第二阶段出现了问题。

我得到这个日志:

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

Gitlab似乎使用了一个无法构建docker映像的共享运行程序,但我不知道如何改变这一点。我无法更改跑步者的配置,因为我使用的是共享跑步者。我也试着在我的第二阶段贴上一些标签,希望有一个更合适的跑步者来照顾我的工作,但我仍然会遇到这个错误。

谢谢你的帮助。

我认为您需要设置DOCKER_HOST以连接到另一个容器中运行的DinD:

docker-build:
image: docker:stable
services:
- docker:dind
stage: package
script:
- export DOCKER_HOST=tcp://docker:2375/
- docker build -t registry.gitlab.com/my-project .
- docker push registry.gitlab.com/my-project

如果您的共享运行程序执行器类型为docker,您可以尝试以下设置:

stages:
- build
- package
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
- docker info
cache:
paths:
- .gradle/wrapper
- .gradle/caches
build:
image: java:8-jdk
stage: build
script:
- ./gradlew build
artifacts:
paths:
- build/libs/*.jar
expire_in: 1 week
only:
- master
docker-build:
stage: package
script:
docker build -t registry.gitlab.com/my-project .
docker push registry.gitlab.com/my-project
after_script:
- echo "End CI"

甚至我们在组织中也遇到过同样的问题。我们发现gitlab的docker区域中的docker存在长期问题,这些问题也可以在3612、2408和2890中跟踪。

我们发现,在我们的案例中,使用docker绑定比docker一中的docker更适合我们的用例。所以,我们在他们的官方页面上使用了这个解决方案。

我知道这个问题已经得到了回答,但这可能会帮助一些有类似用例的人:(

最新更新