Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gitlab CI-使用共享运行程序构建Docker映像(无法连接到Docker守护程序)_Docker_Gitlab - Fatal编程技术网

Gitlab CI-使用共享运行程序构建Docker映像(无法连接到Docker守护程序)

Gitlab CI-使用共享运行程序构建Docker映像(无法连接到Docker守护程序),docker,gitlab,Docker,Gitlab,我目前正在使用Gitlab共享运行程序构建和部署我的项目(至少我也在尝试!) 我有下面的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:

我目前正在使用Gitlab共享运行程序构建和部署我的项目(至少我也在尝试!)

我有下面的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\u主机
以连接到另一个容器中运行的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
如果您是共享用户,您可以尝试以下设置:

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存在一个长期存在的问题,可以在这些问题中进行跟踪

我们发现在我们的案例中使用docker绑定比docker one中的docker更适合我们的用例。因此,我们在他们的研究中使用了该解决方案


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

谢谢你的帮助!我尝试了您的解决方案,它似乎起了作用:作业现在正在构建,但当它试图将映像推送到我的存储库时,我仍然收到一个错误。推送引用存储库[registry.gitlab.com/XXXXX/my project]a7c4fef80584:准备269299191353:准备0daf3549c2ef:准备e0974bfaea82:准备拒绝:访问被禁止您有什么想法吗?不管怎样,你的建议奏效了,谢谢!无论如何,我忘了登录我的docker注册表,使用以下行:-docker login-u gitlab ci token-p$ci\u JOB\u token$ci\u registry
docker\u HOST
设置运行程序配置中的变量。您很可能不知道这个变量。您的
docker info
甚至不会运行,因为gitlab的共享运行程序没有它。您必须使用docker图像。