Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker--不安全的注册表标志未按预期工作_Docker - Fatal编程技术网

docker--不安全的注册表标志未按预期工作

docker--不安全的注册表标志未按预期工作,docker,Docker,登录时具有自签名证书状态的专用注册表的说明: 来自后台程序的FATA[0005]错误响应:v1 ping尝试失败 错误:获取:x509:由签名的证书 未知权威。如果此专用注册表仅支持HTTP或 具有未知CA证书的HTTPS,请添加--不安全的注册表 注册表:8443到守护进程的参数。在HTTPS的情况下,如果 可以访问注册表的CA证书,无需标记; 只需将CA证书放在 /etc/docker/certs.d/registry:8443/ca.crt 我试过了,但又犯了一个错误,IP不在主题中。因此

登录时具有自签名证书状态的专用注册表的说明:

来自后台程序的FATA[0005]错误响应:v1 ping尝试失败 错误:获取:x509:由签名的证书 未知权威。如果此专用注册表仅支持HTTP或 具有未知CA证书的HTTPS,请添加
--不安全的注册表
注册表:8443
到守护进程的参数。在HTTPS的情况下,如果 可以访问注册表的CA证书,无需标记; 只需将CA证书放在 /etc/docker/certs.d/registry:8443/ca.crt

我试过了,但又犯了一个错误,IP不在主题中。因此,我修复了该错误,现在得到:

来自后台程序的FATA[0006]错误响应:服务器错误:Post :x509:由未知用户签名的证书 权威

其中registry是注册表的IP

然后,我将“-unsecureregistry:8443”放在/etc/default/docker中,并重新启动了守护进程

我已经验证过了,它已经被设置好了

根68651012:47?00:00:00/usr/bin/docker-d --不安全的注册表:8443

但docker登录仍会产生此错误:

来自后台程序的FATA[0006]错误响应:服务器错误:Post :x509:由未知用户签名的证书 权威

不安全的注册表工作方式是否与我想象的不同?我如何应对

是的,我需要HTTPS。这是一个私有注册,但在公共IP上。是用真正的证书创建正确的DNS条目的唯一方法吗?

因为我在几个月前就已经对这个问题进行了升级,因为我也遇到了同样的问题,现在-希望-有了解决方案,我想与您分享我为我们的私人维基写的以下段落

设置专用注册表(使用自签名证书) 为了
docker登录到私有注册表,您必须将上面生成的证书分发到docker节点

从haxx.se下载通配符证书和自签名证书的中间证书,然后重新启动Docker守护程序

curl -k https://git.example.com/herzog/pub/raw/master/ssh/example.com.crt > /usr/local/share/ca-certificates/registry.example.com-ca.crt
curl http://curl.haxx.se/ca/cacert.pem > /usr/local/share/ca-certificates/cacert.pem
sudo update-ca-certificates
sudo service docker restart
CA更新的输出示例

root@test1:~# sudo update-ca-certificates
Updating certificates in /etc/ssl/certs... 2 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done.
登录到私有注册表

docker login --username registry --email reg@example.com https://registry.example.com/v1
注意!指定的注册表主机应适用于
docker
docker compose

然后拉一个图像

docker pull registry.example.com/namespace/image:1.0.0

对!!我发现了问题

您需要修复
/etc/systemd/system/multi-user.target.wants/docker.service
。目前,在启动docker时,它没有考虑$OPTIONS。所以我的现在看起来像这样:

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
#The line below was missing $OPTIONS at the end!!!
ExecStart=/usr/bin/docker -d -H fd:// $OPTIONS
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity

[Install]
WantedBy=multi-user.target
在那之后,照常做:

$ sudo systemctl daemon-reload 
$ sudo systemctl restart docker

现在一切都正常了。

最好也是最独立于平台的方法是使用
/etc/docker/daemon.json

瞧:

cat > /etc/docker/daemon.json <<DOCKERCONFIG
{
  "insecure-registries": ["registry:8443"]
}
DOCKERCONFIG
cat>/etc/docker/daemon.json docker 17.xx推荐方式+
有许多方法可以为Docker守护程序配置守护程序标志和环境变量。这是使用独立于平台的
daemon.json
文件,默认情况下,该文件位于Linux上的
/etc/docker/

因此,要配置不安全的注册表,请执行以下操作:

  • daemon.json
    文件中设置以下标志:

    {
        "insecure-registries": ["registry:8443"]
    }
    
  • 重新启动Docker

     $ sudo systemctl restart docker
    
  • 就这样

    我的解决方案是:

  • 如前所述修改
    /etc/docker/daemon.json

  • 将权限修改为:
    /etc/docker/daemon.json
    带有

    sudo chmod-R 777/etc/docker/daemon.json


  • +1.关于这个问题。目前我不需要HTTPS(而且
    --不安全的注册表
    工作得很好),但我必须尽早启用此功能。最终我无法按照描述解决此问题。相反,我添加了一个DNS条目和一个真正的证书,这为我修复了它。我仍然想知道您是如何部署自签名的。如果这对我没有帮助,我想我必须部署自己的证书颁发机构,并将我的环境配置为信任它们(可能会为此使用FreeIPA),因此解决方案似乎是将您的客户端证书放在系统上,并使用更新ca证书注册它。谢谢你的信息。