我正在尝试将 Windows 容器的图像推送到 Windows VM 上的“本地”存储库,该存储库具有自己的 IP 地址。
所以当我在我的 VM 上创建注册表时,我可以通过转到 ipaddress:5000 来查看本地机器上的存储库列表。
但是,当我尝试将图像推送到注册表时,它显示要推送的层,但在底部显示收到意外的 HTTP 状态:500 内部服务器错误。
当我切换到 Linux 容器时,这不是问题。我可以从注册表中推送和拉取没问题。
您需要通过在守护程序配置 JSON 文件中设置“
allow-nondistributable-artifacts
”选项来允许不可分发的工件。
对于 Linux: 使用上述选项创建或更新 docker 守护程序 JSON 文件
/etc/docker/daemon.json
对于 Windows:
将选项
allow-nondistributable-artifacts
添加到JSON中喜欢:
{
"registry-mirrors": [],
"insecure-registries": [],
"debug": true,
"experimental": true,
"allow-nondistributable-artifacts": [
"localhost:5000"
]
}
把
localhost
换成自己的服务器名daemon.json
文件位于 C:\ProgramData\Docker\config\daemon.json
注意:如果您有任何其他设置,只有
allow-nondistributable-artifacts
是重要/必需的。
对我来说,问题是我们的注册表已满。我清空了它,它起作用了。
就我而言,我只是等了一会儿,然后再试一次。 500 个错误消失了。
这可能是因为您要推送图像的远程服务器(或本地服务器)出现错误。在我的例子中,这是一个磁盘空间问题,作为 500 服务器错误抛出。需要在推送图片的服务器上检查问题。
你所有的图片都被推送了,除了少数几个,因为所有其他的都已经被推送了,而新的失败了。
如果注册表前面有nginx,nginx 有一个问题,大文件的PATCH 可能会抛出500 Internal server error。这是由于根分区上的磁盘空间不足引起的。
在这里查看如何修复它:https://stackoverflow.com/a/38873781/2032777
在我的例子中(使用 Nexus 作为本地注册表)当我检查了 nexus 的日志时,我注意到这个问题是由于缺乏存储。