测试不安全的注册表

预计阅读时间:4分钟

该页面包含有关使用开源Docker Registry托管自己的注册表的信息。有关Docker Hub的信息,它提供了托管注册表以及其他功能,例如团队,组织,Web挂钩,自动构建等,请参阅Docker Hub

强烈建议使用由已知CA颁发的TLS证书保护注册表的安全,但是您可以选择使用自签名证书,或通过未加密的HTTP连接使用注册表。这些选择中的任何一个都涉及安全性折衷和其他配置步骤。

部署纯HTTP注册表

警告:无法将不安全的注册表与基本身份验证一起使用。

此过程将Docker配置为完全忽略注册表的安全性。这是非常不安全的,因此不建议这样做。它将您的注册表暴露于琐碎的中间人(MITM)攻击。仅将此解决方案用于隔离测试或在严格控制的气隙环境中。

  1. 编辑daemon.json文件的默认位置,该文件 /etc/docker/daemon.json在Linux或 C:\ProgramData\docker\config\daemon.jsonWindows Server上。如果您使用适用于Mac的Docker桌面或适用于Windows的Docker桌面,请单击Docker图标,选择 首选项(Mac)或设置(Windows),然后选择Docker Engine

    如果daemon.json文件不存在,请创建它。假设文件中没有其他设置,则该文件应具有以下内容:

    {
      "insecure-registries" : ["myregistrydomain.com:5000"]
    }
    

    用示例中的一个替换不安全注册表的地址。

    启用不安全的注册表后,Docker会执行以下步骤:

    • 首先,尝试使用HTTPS。
      • 如果HTTPS可用但证书无效,请忽略有关证书的错误。
      • 如果HTTPS不可用,请退回到HTTP。
  2. 重新启动Docker以使更改生效。

在每个要访问您的注册表的引擎主机上重复这些步骤。

使用自签名证书

警告:与基本身份验证一起使用时,需要将证书信任某些版本的Docker到OS证书存储中(请参阅下文)

这比不安全的注册表解决方案更安全。

  1. 生成自己的证书:

    $ mkdir -p certs
    
    $ openssl req \
      -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
      -addext "subjectAltName = DNS:myregistry.domain.com" \
      -x509 -days 365 -out certs/domain.crt
    

    确保将名称myregistrydomain.com用作CN。

  2. 使用结果在启用TLS的情况下启动注册表

  3. 指示每个Docker守护程序信任该证书。执行此操作的方法取决于您的操作系统。

    • Linux:将domain.crt文件复制到 /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt每个Docker主机上。您无需重启Docker。

    • Windows Server

      1. 打开Windows资源管理器,右键单击该domain.crt 文件,然后选择“安装证书”。出现提示时,选择以下选项:

        商店地址 本地机器
        将所有证书放在以下商店中 选定的
      2. 单击浏览器,然后选择受信任的根证书颁发机构

      3. 点击完成。重新启动Docker。

    • Mac版Docker桌面:按照添加自定义CA证书中的说明进行操作 。重新启动Docker。

    • Windows的Docker桌面:按照添加自定义CA证书中的说明进行操作 。重新启动Docker。

解决不安全的注册表

本节列出了一些常见的故障以及如何从中恢复。

失败...

未能配置Engine守护程序并尝试从不使用TLS的注册表中提取信息,将导致以下消息:

FATA[0000] Error response from daemon: v1 ping attempt failed with error:
Get https://myregistrydomain.com:5000/v1/_ping: tls: oversized record received with length 20527.
If this private registry supports only HTTP or HTTPS with an unknown CA certificate, add
`--insecure-registry myregistrydomain.com:5000` to the daemon's arguments.
In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag;
simply place the CA certificate at /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt

Docker在使用身份验证时仍然抱怨证书?

使用身份验证时,某些版本的Docker还要求您在操作系统级别信任证书。

的Ubuntu

$ cp certs/domain.crt /usr/local/share/ca-certificates/myregistrydomain.com.crt
update-ca-certificates

红帽企业Linux

cp certs/domain.crt /etc/pki/ca-trust/source/anchors/myregistrydomain.com.crt
update-ca-trust

甲骨文Linux

$ update-ca-trust enable

重新启动Docker以使更改生效。

视窗

打开Windows资源管理器,右键单击证书,然后选择 安装证书

然后,选择以下选项:

  • 店铺位置:本地机器
  • 检查将所有证书放置在以下商店中
  • 单击浏览器,然后选择受信任的根证书颁发机构
  • 点击完成

了解有关管理TLS证书的更多信息

将CA证书添加到Windows后,重新启动Windows的Docker桌面。

注册表本地图像标签信息库分布不安全