我有 2 个 EC2,一个安装了 Gitlab-ee,另一个安装了 Docker 并运行 Gitlab-Runner 和一个注册表容器。
Gitlab-Runner 正在工作,并获取对 Gitlab 的提交,并将其发送到 docker 进行构建阶段。然而,在构建阶段,当 docker 容器尝试登录注册表容器时,会出现错误“http:服务器向 HTTPS 客户端提供了 HTTP 响应”
Docker登录代码:
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
故障排除完成:
sudo docker login localhost:5000
软件版本:
如果有人可以帮助我,我将不胜感激!我已经用头撞它两天了。
我相信这个问题缺乏细节,无法为您提供所需的解决方案。无论如何,我会尝试概述您可能遇到的一些问题。
消息“http:服务器向 HTTPS 客户端提供了 HTTP 响应”准确地表明 HTTPS 客户端(即
docker login
)正在套接字 localhost:5000 上期待 TLS (HTTPS) 服务器。
但是您的注册服务器仅配置了 HTTP,不支持 TLS。这就是服务器向 HTTPS 客户端返回 HTTP 响应的原因。
要解决此问题,请遵循官方 docker 指南。
如果你在 gitlab-runner 中使用 docker executor,这个案例值得一读。 这意味着您的 gitlab-runner 会为每个传入作业创建新容器。
您没有共享
CI_REGISTRY
变量的值。
但是,我认为它可能等于 localhost 或域名。
请注意,容器中的 localhost 与主机的 localhost 不同,因为它们位于不同的网络命名空间中。
如果设置了域名的值,请确保该域名在容器命名空间中是可解析的。
您标记为您已尝试过
--insecure-registries
标志,但没有成功。
确保您已将其配置为容器的 Docker 守护进程,而不是主机的 Docker。
如果您使用 Docker-in-Docker 镜像来处理基本上运行单独 Docker 守护进程的作业,这就是事实。
希望这些信息对那些仍在苦苦挣扎的人有用......
我尝试了很多方法,但没有成功。仅编辑 /lib/systemd/system/docker.service 并添加 DOCKER_OPTS="--insecure-registry REGISTRY_IP:REGISTRY_PORT" 有效。 这是一个例子: [服务] ExecStart=/usr/bin/docker -d --insecure-registry REGISTRY_IP:REGISTRY_PORT
希望有帮助。