docker --insecure-registry flag无法按预期工作

时间:2015-04-01 23:53:54

标签: docker

登录时具有自签名证书的私有注册表的说明:

  

FATA守护进程的错误响应:v1 ping尝试失败   错误:获取https://registry:8443/v1/_ping:x509:签署的证书   未知的权威。如果此私有注册表仅支持HTTP或   使用未知CA证书的HTTPS,请将--insecure-registry registry:8443添加到守护程序的参数中。对于HTTPS,如果您   可以访问注册表的CA证书,不需要标志;   只需将CA证书放在   /etc/docker/certs.d/registry:8443/ca.crt

我试过了,但又得到了关于IP不在主题中的另一个错误。所以我修复了这个错误,现在得到:

  

FATA [0006]来自守护程序的错误响应:服务器错误:发布   https://registry:8443/v1/users/:x509:由未知签名的证书   权威

注册表是注册管理机构的IP。

然后我放置了#34; - insecure-registry registry:8443"在/ etc / default / docker中并重新启动守护程序

我已经确认已采取此设置。

  

root 6865 1 0 12:47? 00:00:00 / usr / bin / docker -d   --insecure-registry registry:8443

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

  

FATA [0006]来自守护程序的错误响应:服务器错误:发布   https://registry:8443/v1/users/:x509:由未知签名的证书   权威

不安全注册表的工作方式与我的想法不同,我该如何解决它?

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

5 个答案:

答案 0 :(得分:5)

推荐方式Docker 17.xx +

有许多方法可以为Docker守护程序配置守护程序标志和环境变量。 recommended way将使用与平台无关的daemon.json文件,默认情况下位于Linux上的/etc/docker/

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

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

    {
        "insecure-registries": ["registry:8443"]
    }
    
  2. 重启Docker

     $ sudo systemctl restart docker
    
  3. 就是这样!

答案 1 :(得分:3)

YES!我发现了问题!

您需要修复/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

现在一切正常。

答案 2 :(得分:1)

我的解决方案是:

  1. 修改之前提到的/etc/docker/daemon.json

  2. 修改权限: /etc/docker/daemon.json

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

答案 3 :(得分:0)

由于我几个月前已经提出了这个问题,因为我遇到了同样的问题,现在 - 希望 - 有一个解决方案,我希望与你分享我为我们写的以下段落私人维基......

设置私有注册表(带有自签名证书)

为了docker login私有注册表,您必须将上面生成的证书分发给Docker节点。

从haxx.se下载*.example.com通配符证书和自签名证书的中间证书,然后重新启动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
  

注意!使用https://.../v1指定的注册机构主机应适用于dockerdocker-compose

并拉出图片

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

答案 4 :(得分:0)

最佳且与平台无关的方法是使用/etc/docker/daemon.json configuration file

看哪:

cat > /etc/docker/daemon.json <<DOCKERCONFIG
{
  "insecure-registries": ["registry:8443"]
}
DOCKERCONFIG