Docker Swarm和自签名的Docker Registry

Docker Swarm是否支持Docker Registry与自签名证书的使用?

我已经根据官方的Docker 文档创build了我的群集,它使用在容器中运行的群集主/节点。

它工作正常,但只要我尝试login到我的Dockerregistry我收到错误信息:

$ docker -H :4000 login https://...:443 ... Error response from daemon: Get https://.../v1/users/: x509: certificate signed by unknown authority 

有没有额外的选项需要设置,比如--insecure-registry ? 或者我需要以某种方式更新Docker Swarm容器?

您需要将您的自签名证书或个人CA添加到主机上的可信证书列表中。 出于某种原因,docker不会使用守护进程上的证书进行此身份validation。 这里是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 

守护进程需要重新加载操作系统证书。

正如luka5z在最新的文档中看到的,您也可以通过将cert复制到/etc/docker/certs.d/myregistrydomain.com:5000/ca.crt直接将证书添加到每个/etc/docker/certs.d/myregistrydomain.com:5000/ca.crt 。 这样可以避免信任整个操作系统上的自签名CA.

有没有一种方法,我可以更新与所需的证书?

Docker 17.06会带来docker swarm命令( 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 

这里是一个演示 。

我也遇到了你的问题。

我无法确定这个根本原因,或者是什么限制了这个限制。

但我pipe理一个解决方法:

如果不安全,请确保在每台主机上启动相应的docker守护程序。

你可以find如何更改守护进程选项的信息: https : //docs.docker.com/engine/admin/systemd/

例如:从我的conf。 --insecure-registry <private registry>之后:

 systemctl daemon-reload systemctl restart docker docker login <private registry> 

在每个docker主机上,并拉动所需的图像。

之后,你有所有的图像,它不会试图拉他们了。

我知道这不是最好的解决scheme:(

PS:我还必须将这些参数添加到每个docker守护进程:

 --cluster-advertise=<host:ip> --cluster-store=consul://<consul ip:consul port> 

没有这些我不能在不同的主机上运行容器。 他们都在一个随机select的主机上运行。