我已经设置或已提供到远程Docker注册表的安全URL(HTTPS)。我需要执行docker登录到远程注册表中,以便能够推送本地构建的Docker映像。
命令类似于:
docker login -u myUser https://registry.mydomain.example.com
但是,docker登录失败并显示x509证书验证错误,例如:
Error response from daemon: Get https://registry.mydomain.example.com/v2/: x509: certificate signed by unknown authority
我正在使用macOS / OS X,如何使我的本地Docker(Docker客户端)接受远程存储库的TLS证书进行HTTPS通信?
此外,一旦安全HTTPS连接正常工作,在编写Dockerfile并在本地测试我的映像正常工作之后,如何构建映像并将其推送到远程存储库?
答案 0 :(得分:1)
与Docker文档的链接中特别提到的不同,Linux / Unix指令也适用于macOS / OS X:
https://docs.docker.com/engine/security/certificates/
我获得了以下使用macOs High Sierra 10.13.5(17F77)的MacBook Pro的使用说明。
Docker客户端(本地Docker)版本:18.03.1-ce
通过终端命令将远程注册表管理员提供的证书颁发机构(CA)文件放入特定的文件夹结构中:
sudo mkdir -p /etc/docker/certs.d/registry.mydomain.example.com
sudo cp ca.crt /etc/docker/certs.d/registry.mydomain.example.com
注意:如果您使用带有端口的URL连接到注册表,则该端口需要包含在certs.d文件夹下的文件夹名称中。该URL也可以采用IP形式:
sudo mkdir -p /etc/docker/certs.d/registry.mydomain.example.com:443
sudo mkdir -p /etc/docker/certs.d/172.123.123.1:443
编辑添加!
我与一位同事对此进行了测试,结果发现需要将CA文件添加到macOS钥匙串中(我以前也这样做过)。 It is currently unknown if the above /etc/docker steps are even required on Mac.
我们使用本指南将ca.crt文件导入“钥匙串”(在“证书”菜单中显示为“不可信”)。
https://www.sslsupportdesk.com/how-to-import-a-certificate-into-mac-os/
然后,重新启动本地Docker。
此后,Docker登录应该正常工作。如果仍然出现x509未知授权错误,则最好使用openssl命令针对CA文件验证远程注册表服务器证书的有效性(例如,通过使用浏览器导航到注册表URL来获取): https://www.sslshopper.com/article-most-common-openssl-commands.html
以下是使用OpenShift集成(原子)注册表的示例:
oc login https://registry.mydomain.example.com -u myUser --certificate-authority=ca.crt
docker login -u $(oc whoami) -p $(oc whoami -t) https://registry.mydomain.example.com
您应该得到提示Login Succeeded
,然后:
docker build -t registry.mydomain.example.com/openshiftProject/my-image:1.0 .
docker push registry.mydomain.example.com/openshiftProject/my-image:1.0