使用 gitlab CI 构建 docker 镜像,并推送到自签名的 https nexus 存储库



我有一个 gitlab CI 设置,我想在其中构建和推送 docker 映像,第一个问题是我的 nexus 存储库不是 https。实际的错误消息是这样的:

来自守护程序的错误响应:获取 http://some.host:port/v2/: http: 服务器向 HTTPS 客户端提供了 HTTP 响应

为了构建 docker 映像,我们使用docker:latest映像,我找不到将我们的主机添加为不安全注册表的方法.gitlab-ci.yml

因此,一个自签名的我的nexus存储库希望它能解决,但它也不起作用并给出以下错误消息:

来自守护程序的错误响应:获取 https://some.host:port/v2/: x509: 由未知颁发机构签名的证书

这是我当前的 CI 设置:

image: docker:latest
services:
  - docker:dind
before_script:
  - docker info
  - docker login -u USER -p PASSWORD some.host:port
stages:
  - build
build-image:
  stage: build
  script:
    - docker build -t some.host:port/image:alpine .
    - docker push some.host:port/image:alpine
  only:
    - master
  when: manual

那么是否有一个简单的解决方案或现有的 docker 映像,我可以在其中配置不安全的注册表可能是命令行的一些 docker 魔术,我真的需要创建一个自己的映像来解决这个问题?

您可以使用不同的命令启动 docker dind。有关更多详细信息,请参阅下面的网址

https://docs.gitlab.com/ce/ci/docker/using_docker_images.html#setting-a-command-for-the-service。所以你需要更新你的.gitlab.ci.yml

image: docker:latest
services:
- name: docker:dind
  command: [ "--insecure-registry=some.host:port" ]
before_script:
  - docker info
  - docker login -u USER -p PASSWORD some.host:port
stages:
  - build
build-image:
  stage: build
  script:
    - docker build -t some.host:port/image:alpine .
    - docker push some.host:port/image:alpine
  only:
    - master
  when: manual

然后,您可以使用不安全的http注册表

对我有用,语法略有修改,命令需要数组。

services:
- name: docker:dind
  command: ["--insecure-registry=some.host:port"]

最新更新