我正在尝试推送图像,比如说foo/bar
,从我的本地 Docker 注册表到在 OpenShift 3.11 上运行的注册表(实际上迷你换档 https://github.com/minishift/minishiftv1.33.0+ba29431)。
注册表位于192.168.64.3:2376
并且它需要 HTTPS 连接。它使用自签名证书。
首先,我复制新图像的标签:
docker tag foo/bar 192.168.64.3:2376/app/foo/bar
这样就成功了。然后我尝试推动:
$ docker push 192.168.64.3:2376/app/foo/bar
The push refers to repository [192.168.64.3:2376/app/foo/bar]
Get https://192.168.64.3:2376/v2/: x509: certificate signed by unknown authority
或者,当 Docker 配置为允许在以下位置使用不安全的注册表时:192.168.64.0/24
,它与服务器进行 HTTP 通信,而不是禁用证书验证:
$ docker push 192.168.64.3:2376/app/foo/bar
The push refers to repository [192.168.64.3:2376/app/foo/bar]
Get http://192.168.64.3:2376/v2/: EOF
文档称,对于不安全的注册表,应该“首先尝试使用 HTTPS。如果 HTTPS 可用但证书无效,请忽略有关证书的错误。如果 HTTPS 不可用,则回退到 HTTP。”所以我不希望看到 EOF 错误。
我也无法尝试告诉 Docker 使用 Minishift 证书,因为它突然失去了与本地 Docker 守护进程通信的能力(它应该使用 Unix 域套接字,而不是 tcp://localhost:2376):
$ export DOCKER_TLS_VERIFY="1"
$ export DOCKER_CERT_PATH="/Users/rzg/.minishift/certs"
$ docker push 192.168.64.3:2376/app/foo/bar
Cannot connect to the Docker daemon at tcp://localhost:2376. Is the docker daemon running?
这是我正在使用的 Docker 版本:
Client: Docker Engine - Community
Version: 18.09.2
API version: 1.39
Go version: go1.10.8
Git commit: 6247962
Built: Sun Feb 10 04:12:39 2019
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.2
API version: 1.39 (minimum version 1.12)
Go version: go1.10.6
Git commit: 6247962
Built: Sun Feb 10 04:13:06 2019
OS/Arch: linux/amd64
Experimental: false