使用docker上托管的私有注册表

Con*_*oob 16 docker boot2docker docker-registry

我在docker容器中托管我自己的docker-registry.它是由nginx在一个单独的容器中运行来添加基本身份验证的.检查_ping路由我可以看到nginx正确路由.docker login从boot2docker(在Mac OSX上)调用时出现此错误:

FATA守护进程的错误响应:无效的注册表端点https://www.example.com:8080/v1/:获取https://www.example.com:8080/v1/_ping:x509:证书由未知签名权威.如果此私有注册表仅支持具有未知CA证书的HTTP或HTTPS,请添加--insecure-registry www.example.com:8080到守护程序的参数.对于HTTPS,如果您可以访问注册表的CA证书,则不需要该标志; 只需将CA证书放在/etc/docker/certs.d/www.example.com:8080/ca.crt

这很奇怪 - 因为它是有效的CA SSL证书.我已经尝试--insecure-registry按照这些说明添加EXTRA-ARGS:https://github.com/boot2docker/boot2docker#insecure-registry但最初"profile"文件不存在.如果我创建它,并添加

EXTRA_ARGS="--insecure-registry www.example.com:8080"
Run Code Online (Sandbox Code Playgroud)

我看不出任何进步.我想隔离这个例子,所以尝试docker login从ubuntu VM(而不是boot2docker).现在我得到一个不同的错误:

Error response from daemon: 
Run Code Online (Sandbox Code Playgroud)

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

docker run -d -p 5000:5000 registry
Run Code Online (Sandbox Code Playgroud)

(注意nginx路由从8080到5000).任何帮助和/或资源来帮助调试这将非常感激.

UPDATE

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

  • 创建一个私人注册表
  • 使用基本身份验证来保护注册表
  • 使用boot2docker中的注册表

我创建了注册表并在本地测试,它的工作原理.我已经使用nginx添加基本身份验证来保护注册表.

麻烦现在实际上是使用两种类型客户端的注册表:

1)非boot2docker客户端.下面的答案之一有助于此.我在/ etc/default/docker中为选项添加了--insecure-registry标志,现在我可以与远程docker注册表进行通信了.但是,这与auth不兼容,因为docker login收到错误:

2015/01/15 21:33:57 HTTP code 401, Docker will not send auth headers over HTTP.
Run Code Online (Sandbox Code Playgroud)

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

2)对于boot2docker客户端,我不能让--insecure-registry工作或证书被信任?

更新2

这个堆栈交换问题后,我设法将ca添加到我的ubuntu VM,现在我可以从非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
Run Code Online (Sandbox Code Playgroud)

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

ani*_*ish 6

编辑docker文件

sudo vim /etc/default/docker
Run Code Online (Sandbox Code Playgroud)

添加 DOCKER_OPTS

DOCKER_OPTS="$DOCKER_OPTS --insecure-registry=www.example.com:8080"
Run Code Online (Sandbox Code Playgroud)

重新启动docker服务

sudo service docker restart
Run Code Online (Sandbox Code Playgroud)

  • 在Mac OS X上使用boot2docker时该文件在哪里? (7认同)

Mig*_*ues 1

尝试使用参数运行守护进程:

docker -d --insecure-registry="www.example.com:8080"
Run Code Online (Sandbox Code Playgroud)

而不是设置EXTRA_ARGS

  • 你如何为 boot2docker 做到这一点? (2认同)