Ssl Docker注册表--不安全的注册表不工作

Ssl Docker注册表--不安全的注册表不工作,ssl,docker,https,Ssl,Docker,Https,我试图在CentOS 7上运行Docker注册表供内部使用 我已经从/usr/lib/systemd/system/Docker.service设置了Docker配置,如下所示: [Service] .... ExecStart= ExecStart=/usr/bin/docker daemon -H fd:// --insecure-registry 127.0.0.1:5000 .... 然后使用systemctl daemon reload和sudo service docker st

我试图在CentOS 7上运行Docker注册表供内部使用

我已经从
/usr/lib/systemd/system/Docker.service
设置了Docker配置,如下所示:

[Service]
.... 
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --insecure-registry 127.0.0.1:5000
....
然后使用
systemctl daemon reload
sudo service docker start
启动docker守护程序,并确认docker正在使用
ps-ef | grep docker
选项运行:

root     116221      1  0 13:21 ?        00:00:00 /usr/bin/docker daemon -H fd:// --insecure-registry 127.0.0.1:5000
但当我尝试使用https
https
连接到注册表时,失败了

# Try from the server which the registry is running

curl -X GET https://127.0.0.1:5000/v1/_ping
=> curl: (35) Encountered end of file


# Try from the remote client

curl -X GET https://{registry-server-ip}:5000/v1/_ping
=> curl: (35) Server aborted the SSL handshake
当然,我已经成功地使用
http
访问了注册表:

curl -X GET http://127.0.0.1:5000/v1/_ping
=> {"host": ["Linux", ...}
作为参考

# docker version
Client:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 21:23:11 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 21:23:11 2016
 OS/Arch:      linux/amd64

我还需要检查什么?

您可以在http中访问而不能在https中访问的原因很简单,因为您将注册表配置为不安全的注册表。也就是说,没有启用TLS。您可以在和找到有关安全注册表的更多信息

如果你想让https也起作用,你需要准备一个CA,并用它配置你的注册表。请确保您的CA配置正确

编辑: 我想你可能误解了什么是“不安全的注册表”。此功能不支持真正的TLS支持,它允许您创建仅支持HTTP或HTTPS且CA证书未知的专用注册表。如果您想要HTTPS工作,您有两个选择:使用自签名CA或购买CA。这可能会对您有所帮助

EDIT2:为了尝试HTTP访问,我按照注册表的官方图像页面上的指南运行了一个简单的测试:

以下是步骤:

  • 添加不安全选项
    DOCKER\u OPTS=“--unsecure registry=127.0.0.1:5000”
    , 然后重新启动docker服务

  • $docker run-p 5000:5000-v/home/mypc/data:/tmp/registry dev registry

  • $docker tag hello world 127.0.0.1:5000/你好

  • $docker push 127.0.0.1:5000/你好

  • 输出为:


    docker推送正在工作。

    您可以在http中访问而不能在https中访问的原因只是因为您将注册表配置为不安全的注册表。也就是说,没有启用TLS。您可以在和找到有关安全注册表的更多信息

    如果你想让https也起作用,你需要准备一个CA,并用它配置你的注册表。请确保您的CA配置正确

    编辑: 我想你可能误解了什么是“不安全的注册表”。此功能不支持真正的TLS支持,它允许您创建仅支持HTTP或HTTPS且CA证书未知的专用注册表。如果您想要HTTPS工作,您有两个选择:使用自签名CA或购买CA。这可能会对您有所帮助

    EDIT2:为了尝试HTTP访问,我按照注册表的官方图像页面上的指南运行了一个简单的测试:

    以下是步骤:

  • 添加不安全选项
    DOCKER\u OPTS=“--unsecure registry=127.0.0.1:5000”
    , 然后重新启动docker服务

  • $docker run-p 5000:5000-v/home/mypc/data:/tmp/registry dev registry

  • $docker tag hello world 127.0.0.1:5000/你好

  • $docker push 127.0.0.1:5000/你好

  • 输出为:


    docker推送正在工作。

    您也可以查看此链接:


    它解释了在docker客户端计算机上的何处存储证书,以便不再将注册表视为不安全的注册表。

    您也可以查看此链接:


    它向您解释了在docker客户端计算机上的何处存储证书,以使注册表不再被认为是不安全的。

    感谢您的回复!我原以为
    --不安全注册表
    选项是允许远程访问,如
    docker pull
    docker push
    ,而无需CA。但我从您的评论中了解到,我需要配置不带
    --不安全注册表
    的CA,以允许
    docker push
    作为命令使用
    https
    ,我说得对吗?@Seonho嗨,是的,--不安全的注册表允许您在没有CA的情况下进行远程访问,但在这种情况下,远程访问仅限于HTTP。您可以使用HTTPS,只要您有CA。但有两种情况取决于您拥有的CA类型:1。如果您的CA是自签名的(意味着它不是由受信任的签名者发布的),那么您必须添加--unsecureregistry选项。2.如果您的CA是可信的(例如您购买了一个),那么您就不需要这个——不安全的注册表选项。希望这有帮助。@Seonho我要提到的最后一件事是,您可以使用自签名CA,而不使用--unsecure注册表选项。检查此处的步骤:在步骤4中,“指示每个docker守护进程信任您的自签名证书”。非常感谢您的精彩回答。总而言之,最后,据我所知,1<代码>--不安全注册表后面是我拥有的CA类型(自签名或可信签名),但不是CA的必要性。也就是说,我必须将CA配置为使用
    pull
    push
    图像到注册表,因为命令是通过HTTPS执行的。@Seonho 1。对的2.不,pull和push也可以在普通HTTP上工作,您可以在没有CA的情况下设置注册表,但启用了--unsecure registry选项。Docker pull和push也应该有效。谢谢您的回复!我原以为
    --不安全注册表
    选项是允许远程访问,如
    docker pull
    docker push
    ,而无需CA。但我从您的评论中了解到,我需要配置不带
    --不安全注册表
    的CA,以允许
    docker push
    作为命令使用
    https
    ,我说得对吗?@Seonho嗨,是的,--不安全的注册表允许您在没有CA的情况下进行远程访问,但在这种情况下,远程访问仅限于HTTP。您可以使用HTTPS,只要您有CA。但有两种情况取决于您拥有的CA类型:1。如果您的CA是自签名的(意味着它不是由
    The push refers to a repository [127.0.0.1:5000/hello]
    
    a02596fdd012: Image successfully pushed 
    
    Pushing tag for rev [c54a2cc56cbb] on {http://127.0.0.1:5000/v1/repositories/hello/tags/latest}