首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用docker上托管的私有注册表

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

Stack Overflow用户
提问于 2015-01-06 14:04:29
回答 7查看 18.9K关注 0票数 16

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

来自守护程序的

FATA0003错误响应:无效的注册表终结点https://www.example.com:8080/v1/:获取由未知颁发机构签名的https://www.example.com:8080/v1/_ping:x509:证书。如果此专用注册表仅支持具有未知CA证书的HTTPS或HTTPS,请将--insecure-registry www.example.com:8080添加到守护程序的参数中。在HTTPS的情况下,如果您有权访问注册表的CA证书,则不需要该标志;只需将CA证书放在/etc/docker/certs.d/www.example.com:8080/ca.crt

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

代码语言:javascript
复制
EXTRA_ARGS="--insecure-registry www.example.com:8080"

我看不到任何改善。我想隔离这个例子,所以从一个ubuntu虚拟机(而不是boot2docker)上尝试了docker login。现在我得到一个不同的错误:

代码语言:javascript
复制
Error response from daemon: 

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

代码语言:javascript
复制
docker run -d -p 5000:5000 registry

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

更新

我正在寻找一个指南来帮助全面解决这个问题。具体地说:

  • 使用基本身份验证创建专用registry
  • Secure注册表
  • 使用boot2docker

中的注册表

我已经创建了注册表,并在本地进行了测试,它工作正常。我已经用nginx添加了基本身份验证来保护注册表。

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

1)非boot2docker客户端。下面的一个答案对此很有帮助。我在/etc/default/docker中的选项中添加了--insecure-registry标志,现在我可以与我的远程docker注册表通信了。但是,这与auth不兼容,因为docker登录会得到一个错误:

代码语言:javascript
复制
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客户端,我不能让--不安全--注册表或证书被信任?

更新2

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

尽管我的当前用户是docker组的成员(因此我不必使用sudo),但我现在必须使用sudo,否则在尝试登录或从我的私有注册表中拉入时会出现以下错误

代码语言:javascript
复制
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来指定它们,而不是它们的名称。

EN

回答 7

Stack Overflow用户

发布于 2015-01-16 11:29:18

编辑docker文件

代码语言:javascript
复制
sudo vim /etc/default/docker

添加DOCKER_OPTS

代码语言:javascript
复制
DOCKER_OPTS="$DOCKER_OPTS --insecure-registry=www.example.com:8080"

正在重新启动docker服务

代码语言:javascript
复制
sudo service docker restart
票数 6
EN

Stack Overflow用户

发布于 2015-06-11 03:15:03

运行以下命令:

代码语言:javascript
复制
boot2docker ssh "echo $'EXTRA_ARGS=\"--insecure-registry <YOUR INSECURE HOST>\"' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"
票数 3
EN

Stack Overflow用户

发布于 2015-01-16 11:59:52

Docker版本> 1.3.1在连接到docker注册表时默认通过HTTPS进行通信

如果您正在使用Nginx到docker注册中心正在侦听的5000端口的proxy_pass,您将需要终止docker客户端到webserver/LB (在本例中为Nginx)的docker注册中心的SSL连接。要验证Nginx是否正在终止SSL连接,可以使用cURL https://www.example.com:8081/something,其中8081是为测试SSL证书而设置的另一个端口。

如果您不关心docker客户端是否通过HTTP而不是HTTPS连接到注册表,请添加

OPTIONS=“--不安全注册表www.example.com:8080”

在/etc/sysconfig/docker (或其他发行版中的等效文件)中重新启动docker服务。

希望能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27792969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档