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
我正在寻找一个帮助全面解决这个问题的指南.特别:
我创建了注册表并在本地测试,它的工作原理.我已经使用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指定它们 - 而不是它们的名称.
编辑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)
尝试使用参数运行守护进程:
docker -d --insecure-registry="www.example.com:8080"
Run Code Online (Sandbox Code Playgroud)
而不是设置EXTRA_ARGS
| 归档时间: |
|
| 查看次数: |
18541 次 |
| 最近记录: |