我有一个 docker 注册表,我正在 nginx 代理后面访问该注册表,该代理使用客户端 ssl 证书进行身份验证。
当我尝试推送到此注册表时,我需要 docker 守护进程将客户端证书发送到 nginx。
根据: https://docs.docker.com/engine/security/certificates/
应该有一个名为 /etc/docker 的目录,这些证书可以存放在其中。 Docker for Mac 上不存在此目录。
所以我想我应该尝试将证书放入虚拟机本身:
docker-machine ssh 默认
这导致 docker 抱怨: 来自守护进程的错误响应:crypto/tls:私钥与公钥不匹配
我不认为我的密钥对有任何问题,并且我已经在 Linux 上完成了相同的设置(更容易),没有任何问题。
4 年后,Google 仍然把我带到这里。
我在官方文档中找到了答案: (苹果机)https://docs.docker.com/desktop/faqs/macfaqs/#add-client-certificates (Windows)https://docs.docker.com/desktop/faqs/windowsfaqs/#how-do-i-add-client-certificates
引自来源:
您可以将您的客户端证书放入
和~/.docker/certs.d/<MyRegistry>:<Port>/client.cert
。~/.docker/certs.d/<MyRegistry>:<Port>/client.key
当 Docker for Mac 应用程序启动时,它会复制 将 Mac 上的
文件夹复制到~/.docker/certs.d
Moby(Mac/etc/docker/certs.d
虚拟机的 Docker)上的目录。xhyve
- 对钥匙串或
目录进行任何更改后,您需要重新启动 Docker for Mac,以便~/.docker/certs.d
更改生效。- 注册表不能被列为不安全注册表(请参阅Docker Engine)。 Docker for Mac 将忽略下面列出的证书
不安全的注册表,并且不会发送客户端证书。命令
就像 docker run 一样,尝试从注册表中拉取会产生
命令行以及注册表上的错误消息。
自签名 TLS CA 可以这样安装,您的证书可能位于同一目录中。
sudo mkdir -p /Applications/Docker.app/Contents/Resources/etc/ssl/certs
sudo cp my_ca.pem /Applications/Docker.app/Contents/Resources/etc/ssl/certs/ca-certificates.crt
https://docs.docker.com/desktop/mac/#add-tls-certificates对我有用,这里是关于如何使用的用户的简短描述
# Add the cert for all users
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
# Add the cert for yourself
security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ca.crt
这是 Docker for Mac 中最新的“2022 年 10 月”文档。 (我明确表示要查看完整网址!)
应该有一个名为 /etc/docker 的目录,这些证书可以存放在其中。 Docker for Mac 上不存在此目录。
就我而言,默认情况下我也没有
/etc/docker
。如果您使用 ~/.docker
,docker 桌面会将别名传递到 /etc/docker
。
我不认为我的密钥对有任何问题,并且我已经在 Linux 上完成了相同的设置(更容易),没有任何问题。
您可以尝试将密钥对放在
~/.docker/certs.d/Hostname:port
下,然后重新启动 Docker Desktop for Mac。结果,我想你可以实现你想要的。
在 MacOS 上,为了在 Docker 容器内获取主机 TLS 证书,我会执行以下操作:
security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain > ~/.local_certs_for_docker/system_roots_certs.pem
/etc/ssl/certs/
。例如,使用 docker run
,您可以执行以下操作:-p ~/.local_certs_for_docker/certs.pem:/etc/ssl/certs/ca-certificates.crt
希望有帮助!