Docker Swarm是否支持Docker Registry使用自签名证书?
我根据官方Docker documentation中的步骤创建了我的群集,它使用在容器内运行的swarm主/节点。
效果很好,但是一旦我尝试登录我的Docker Registry,我就会收到错误消息:
$ docker -H :4000 login https://...:443
...
Error response from daemon: Get https://.../v1/users/: x509: certificate signed by unknown authority
是否需要设置其他选项,例如--insecure-registry
?或者我是否需要以某种方式更新Docker Swarm容器?
答案 0 :(得分:3)
您需要将自签名证书或个人CA添加到主机上的受信任证书列表中。出于某种原因,docker不会使用守护程序上的证书进行此身份验证。以下是debian主机的命令:
sudo mkdir -p /usr/local/share/ca-certificates
sudo cp ca.pem /usr/local/share/ca-certificates/ca-local.crt
sudo update-ca-certificates
sudo systemctl restart docker
守护程序需要重新启动docker才能重新加载操作系统证书。
正如luka5z在latest documentation中看到的那样,您还可以通过将证书复制到/etc/docker/certs.d/myregistrydomain.com:5000/ca.crt
来直接将证书添加到每个docker引擎。这样可以避免在整个操作系统上信任自签名CA.
答案 1 :(得分:2)
有没有办法可以用所需的证书更新它?
Docker 17.06将带来命令docker swarm ca(PR 48)
意味着docker swarm ca --rotate
就够了。
root@ubuntu:~# docker swarm ca --help
Usage: docker swarm ca [OPTIONS]
Manage root CA
Options:
--ca-cert pem-file Path to the PEM-formatted root CA certificate to use for the new cluster
--ca-key pem-file Path to the PEM-formatted root CA key to use for the new cluster
--cert-expiry duration Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
-d, --detach Exit immediately instead of waiting for the root rotation to converge
--external-ca external-ca Specifications of one or more certificate signing endpoints
--help Print usage
-q, --quiet Suppress progress output
--rotate Rotate the swarm CA - if no certificate or key are provided, new ones will be generated
答案 2 :(得分:0)
我也遇到了你的问题。
我无法确定这个的根本原因,或者是什么设置了这个限制。
但我设法解决了这个问题:
如果不安全,请确保在每个主机上相应地启动每个docker守护程序。
您可以找到有关如何更改守护程序选项的信息:https://docs.docker.com/engine/admin/systemd/
例如:来自我的conf。之后--insecure-registry <private registry>
:
systemctl daemon-reload
systemctl restart docker
docker login <private registry>
在每个泊坞主机上并拉出所需的图像。
之后你拥有了所有的图像,它们不再试图拉它们了。
我知道这不是最好的解决方案:(
PS:我还必须将这些参数添加到每个docker守护程序:
--cluster-advertise=<host:ip> --cluster-store=consul://<consul ip:consul port>
没有这些我无法在不同的主机上运行容器。他们都在随机选择的一个主机上运行。