在docker上使用私人注册表

我在Docker容器中托管我自己的docker注册表。它正在由一个单独的容器中运行的nginx来添加基本身份验证。检查_ping路由我可以看到nginx正确路由。当从boot2docker(在Mac OSX上)调用docker登录时,我得到这个错误:

FATA[0003] Error response from daemon: Invalid registry endpoint https://www.example.com:8080/v1/: 
Get https://www.example.com:8080/v1/_ping: x509: certificate signed by unknown authority. If this
private registry supports only HTTP or HTTPS with an unknown CA certificate, please add 
`--insecure-registry www.example.com:8080` to the daemon's arguments. In the case of HTTPS, 
if you have access to the registry's CA certificate, no need for the flag; simply place the CA
certificate at /etc/docker/certs.d/www.example.com:8080/ca.crt 

这是奇怪的 – 因为它是一个有效的CA SSL证书。我试过按照以下说明在EXTRA-ARGS中添加–insecure-registry:https://github.com/boot2docker/boot2docker#insecure-registry,但最初的“配置文件”文件不存在。如果我创建它,并添加

EXTRA_ARGS="--insecure-registry www.example.com:8080"

我看不到改善。我想隔离示例,所以尝试从ubuntu VM(而不是boot2docker)的docker登录。现在我得到一个不同的错误:

Error response from daemon: 

docker注册表直接从公共集线器运行,例如

docker运行-d -p 5000:5000注册表

(注意,nginx路由从8080到5000)。任何帮助和/或资源帮助调试这将是非常感谢。

UPDATE

我正在寻找一个指南来帮助全面解决这个问题。特别:

>创建私人注册表
>使用基本Auth保护注册表
>使用boot2docker注册表

我已经创建了注册表并在本地测试,它的工作原理。我已经通过添加基本认证的nginx来保护注册表。

现在的麻烦是现在使用两种客户端的注册表:

1)非boot2docker客户端。
下面的答案之一帮助了这一点。我添加了–insecure-registry标志到/ etc / default / docker中的选项,现在我可以跟我的远程docker注册表。
但是,这与auth不兼容,因为docker login会出现错误:

 2015/01/15 21:33:57 HTTP code 401, Docker will not send auth headers over HTTP.

所以,如果我想使用auth,我需要使用HTTPS。我已经有这个服务器通过HTTPS服务,但如果我设置 – insecure-registry不起作用。似乎有一个证书信任问题,我相信我可以解决非boot2docker但是..

2)对于一个boot2docker客户端,我不能得到 – insecure注册表工作或证书被信任?

更新2

以下this stack exchange问题我设法添加ca到我的ubuntu虚拟机,我现在可以从非boot2docker客户端使用。然而,仍然有很多奇怪的行为。

即使我当前的用户是docker组的成员(所以我不必使用sudo)我现在必须使用sudo或者我尝试登录或从我的私人注册表中获取以下错误

user@ubuntu:~$ docker login example.com:8080
WARNING: open /home/parallels/.dockercfg: permission denied

parallels@ubuntu:~$ docker pull example.com:8080/hw:1
WARNING: open /home/parallels/.dockercfg: permission denied

当我第一次运行从私人注册表提取的容器时,我必须通过图像ID指定它们,而不是它们的名称。

最佳答案
编辑docker文件

sudo vim /etc/default/docker

添加DOCKER_OPTS

DOCKER_OPTS="$DOCKER_OPTS --insecure-registry=www.example.com:8080"

重新启动码头服务

sudo service docker restart

转载注明原文:在docker上使用私人注册表 - 代码日志