测试不安全的注册表
预计阅读时间:4分钟
该页面包含有关使用开源Docker Registry托管自己的注册表的信息。有关Docker Hub的信息,它提供了托管注册表以及其他功能,例如团队,组织,Web挂钩,自动构建等,请参阅Docker Hub。
强烈建议使用由已知CA颁发的TLS证书保护注册表的安全,但是您可以选择使用自签名证书,或通过未加密的HTTP连接使用注册表。这些选择中的任何一个都涉及安全性折衷和其他配置步骤。
部署纯HTTP注册表
警告:无法将不安全的注册表与基本身份验证一起使用。
此过程将Docker配置为完全忽略注册表的安全性。这是非常不安全的,因此不建议这样做。它将您的注册表暴露于琐碎的中间人(MITM)攻击。仅将此解决方案用于隔离测试或在严格控制的气隙环境中。
-
编辑
daemon.json
文件的默认位置,该文件/etc/docker/daemon.json
在Linux或C:\ProgramData\docker\config\daemon.json
Windows Server上。如果您使用适用于Mac的Docker桌面或适用于Windows的Docker桌面,请单击Docker图标,选择 首选项(Mac)或设置(Windows),然后选择Docker Engine。如果
daemon.json
文件不存在,请创建它。假设文件中没有其他设置,则该文件应具有以下内容:{ "insecure-registries" : ["myregistrydomain.com:5000"] }
用示例中的一个替换不安全注册表的地址。
启用不安全的注册表后,Docker会执行以下步骤:
- 首先,尝试使用HTTPS。
- 如果HTTPS可用但证书无效,请忽略有关证书的错误。
- 如果HTTPS不可用,请退回到HTTP。
- 首先,尝试使用HTTPS。
-
重新启动Docker以使更改生效。
在每个要访问您的注册表的引擎主机上重复这些步骤。
使用自签名证书
警告:与基本身份验证一起使用时,还需要将证书信任某些版本的Docker到OS证书存储中(请参阅下文)
这比不安全的注册表解决方案更安全。
-
生成自己的证书:
$ 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。 -
使用结果在启用TLS的情况下启动注册表。
-
指示每个Docker守护程序信任该证书。执行此操作的方法取决于您的操作系统。
-
Linux:将
domain.crt
文件复制到/etc/docker/certs.d/myregistrydomain.com:5000/ca.crt
每个Docker主机上。您无需重启Docker。 -
Windows Server:
-
打开Windows资源管理器,右键单击该
domain.crt
文件,然后选择“安装证书”。出现提示时,选择以下选项:商店地址 本地机器 将所有证书放在以下商店中 选定的 -
单击浏览器,然后选择受信任的根证书颁发机构。
-
点击完成。重新启动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资源管理器,右键单击证书,然后选择 安装证书。
然后,选择以下选项:
- 店铺位置:本地机器
- 检查将所有证书放置在以下商店中
- 单击浏览器,然后选择受信任的根证书颁发机构
- 点击完成
将CA证书添加到Windows后,重新启动Windows的Docker桌面。
注册表,本地,图像,标签,信息库,分布,不安全