【问题标题】:Docker Swarm and self-signed Docker RegistryDocker Swarm 和自签名 Docker Registry
【发布时间】:2016-06-21 11:57:06
【问题描述】:

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

我根据官方 Docker documentation 的步骤创建了我的集群,它使用在容器内运行的 swarm master/nodes。

它运行良好,但是当我尝试登录我的 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 容器?

【问题讨论】:

    标签: docker docker-registry


    【解决方案1】:

    您需要将您的自签名证书或个人 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。

    【讨论】:

    • 当我在 Docker 容器中运行 swarm 时,有没有办法用所需的证书更新它?
    • 您是否尝试更新每个主机上的证书?
    • 太棒了!看起来需要将自签名证书“​​上传”到属于 swarm 集群的每个节点。我基本上遵循了官方documentation 中描述的步骤,“...通过将 domain.crt 文件复制到 /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt。” . @BMitch 如果您通过包含最后一个提示来更新您的答案,我会接受它。
    【解决方案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
    

    Here is a demo.

    【讨论】:

      【解决方案3】:

      我也遇到了你的问题。

      我无法确定造成这种情况的根本原因,或者是什么造成了这种限制。

      但我设法解决了:

      如果不安全,请确保在每个主机上相应地启动每个 docker 守护进程。

      您可以找到有关如何更改守护程序选项的信息:​​https://docs.docker.com/engine/admin/systemd/

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

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

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

      在你拥有所有图像之后,它就不会再尝试拉它们了。

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

      PS:我还必须将这些参数添加到每个 docker daemon:

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

      没有这些,我无法在不同的主机上运行容器。它们都在随机选择的一台主机上运行。

      【讨论】:

        猜你喜欢
        • 2017-02-24
        • 1970-01-01
        • 1970-01-01
        • 2017-06-05
        • 2016-11-23
        • 1970-01-01
        • 1970-01-01
        • 2021-10-20
        • 2018-04-01
        相关资源
        最近更新 更多