2016-07-26 98 views
0

我试图运行在内部使用泊坞注册表,在CentOS 7多克尔注册表--insecure的注册表不工作

我从/usr/lib/systemd/system/docker.service设置泊坞窗的配置如下:

[Service] 
.... 
ExecStart= 
ExecStart=/usr/bin/docker daemon -H fd:// --insecure-registry 127.0.0.1:5000 
.... 

然后开始了码头工人守护进程systemctl daemon-reloadsudo service docker start,并证实泊坞窗是用选项运行与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,它失败了。

# 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 

我应该有更多的检查?

回答

0

您可以在http中访问但不在https中的原因很简单,因为您将注册表配置为不安全注册表。这意味着,不启用TLS。您可以在herehere找到有关安全注册表的更多信息。

如果你想使https也可以工作,你需要准备一个CA,并配置你的注册表。请确保您的CA已正确配置。

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

EDIT2:为了让HTTP访问一试,我运行一个简单的测试注册的官方图片页面上的导向下:Run the registry docker container: Quick version

下面是步骤:

  1. 添加不安全的选项DOCKER_OPTS="--insecure-registry=127.0.0.1:5000", 然后重新启动docker服务。

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

  3. $ docker tag hello-world 127.0.0.1:5000/hello

  4. $ docker push 127.0.0.1:5000/hello

的输出是:

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} 

码头推动工作。

+0

谢谢你的回复!我以为'--insecure-registry'选项允许远程访问,比如没有CA的'docker pull'或'docker push'。 但是我的理解是你的评论是我需要配置CA而不用'--insecure-registry'来允许'docker pull'或'docker push'作为命令使用'https',对吗? – Seonho

+0

@Seonho嗨,是的,--insecure-registry允许你在没有CA的情况下进行远程访问,但是在这种情况下,远程访问只有HTTP。只要你有一个CA,你就可以做HTTPS。但是,两种情况取决于您拥有哪种类型的CA:1.如果您的CA是自签名的(意味着它不是由可信签名人发布),那么您必须添加--insecure-registry选项。 2.如果你的CA是可信的(例如你买了一个),那么你就不需要这个--insecure-registry选项。希望这有帮助。 –

+0

@Seonho我必须提到的最后一件事是您可以使用自签名CA,并且不使用--insecure-registry选项。检查这里的步骤:https://docs.docker.com/registry/insecure/#/using-self-signed-certificates在步骤4中,“指示每个docker守护程序信任您的自签名证书”。 –

0

您可以在此链接一看还有:

https://docs.docker.com/engine/security/certificates/

它说明你在哪里存储在泊坞窗客户机证书注册表不再被视为不安全的。

+0

谢谢,Jonathan,我已经检查过这个文档:) – Seonho

+0

然后你必须为你的私人注册表创建证书。然后,您必须手动将ca复制到每个想要在/etc/docker/certs.d/hostname:port下访问的docker客户端实例,然后才能推送您的图像。 –