gitlab-ci docker-in-docker访问不安全的注册表

mcg*_*uip 4 gitlab docker gitlab-ci dind

在配置gitlab-ci来构建docker镜像并将它们推送到我的gitlab不安全的注册表时,我遇到了一些错误.我的gitlab-ci.yaml如下:

stages:
  - build
  - deploy

variables:
  GIT_SUBMODULE_STRATEGY: recursive
  CONTAINER_IMAGE: XXX:$CI_COMMIT_REF_NAME

# The insecure-registry flag 
services:
  - docker:dind

build_container:
  image: docker:latest
  stage: build
  before_script:
    - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin

  script:
    - docker build --pull -t $CONTAINER_IMAGE .
    - docker push $CONTAINER_IMAGE
Run Code Online (Sandbox Code Playgroud)

第一个错误是:

  $ docker login -u gitlab-ci-token -p $CI_JOB_TOKEN myregistry.gitlab.com
  WARNING! Using --password via the CLI is insecure. Use --password-stdin.
  Warning: failed to get default registry endpoint from daemon (Cannot connect 
  to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon 
  running?). Using system default: https://index.docker.io/v1/
  Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the 
  docker daemon running?
Run Code Online (Sandbox Code Playgroud)

通过更新login命令解决了这个问题

echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" myregistry.gitlab.com --password-stdin
Run Code Online (Sandbox Code Playgroud)

不幸的是更新后,我遇到了另一个错误:

$ echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" myregistry.gitlab.com --password-stdin
Error response from daemon: Get https://myregistry.gitlab.com/v2/: dial tcp XX.XX.XXX.XXX:443: getsockopt: connection refused
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

mcg*_*uip 14

与任何其他docker安装一样,有必要指示docker守护程序允许连接到不安全的注册表.为了在docker-in-docker服务的上下文中执行此操作,必须将此配置传递给服务.这可以通过更新您的gitlab-ci.yaml来将服务指定为:

services:
  - name: docker:dind
    command: ["--insecure-registry=myregistry.gitlab.com"]
Run Code Online (Sandbox Code Playgroud)

  • 你救了我的一天。谢谢 (2认同)
  • 我的意思是使用类似“命令:[“-insecure-registry = $ CI_REGISTRY”]`的命令。在这种情况下,上下文属于运行程序,因此该变量对服务不可见。 (2认同)