【问题标题】:How to access Docker Registry publicly from both sub network and outside world如何从子网和外界公开访问 Docker Registry
【发布时间】:2020-06-30 07:32:22
【问题描述】:

我刚刚通过以下方式运行了一个 docker 注册表:

$ docker run -d   --name registry  --restart always   -p 5961:5000   registry:2.7.1

现在我可以通过以下方式推送它:

$ docker tag ubuntu:v2 localhost:5961/ubuntu:v2
$ docker push localhost:5961/ubuntu:v2

但不是来自外部。例如,我不能通过执行从同一网络上的另一台机器推送到它:

$ docker tag ubuntu:v2 192.168.1.122:5961/ubuntu:v2
$ docker push 192.168.1.122:5961/ubuntu:v2

错误是:

The push refers to repository [192.168.1.122:5961/ubuntu]
Get https://192.168.1.122:5961/v2/: http: server gave HTTP response to HTTPS client

为什么? 另外我不知道如何从外界拉出这张图片(192.168.1.122:5961/ubuntu:v2)。例如:

$ docker pull <public-ip>:5961/ubuntu:v2

注意,我可以将机器192.168.1.122的端口5961端口转发到的同一个端口。

【问题讨论】:

  • 如果您想降级我的问题,请添加评论原因!!!!
  • @Saeed 你的意思是 docker tag 不是一个好方法吗?!我应该使用名称 '192.168.1.122:5961/ubuntu:v2' 构建我的图像吗?

标签: docker docker-registry


【解决方案1】:

1 关于本地网络:

您的 docker 注册表不安全,并且使用的是 HTTP,而不是 HTTPS。所以你需要为客户端守护进程定义一个insecure registry,通过像这样更新/etc/docker/daemon.json文件:

{
  "insecure-registries" : ["192.168.1.122:5961"]
}

见:docs

2 关于从外界拉取图片:

它应该按照您描述的方式工作docker pull &lt;public-ip&gt;:5961/ubuntu:v2(只要所有客户端都将注册表定义为不安全)

但请不要使用对外界开放的不安全注册表,除非您希望世界上的每个人都能够拉取您的图像,否则请在您的注册表服务前面添加一些身份验证机制

【讨论】:

  • 感谢您对不安全注册表的良好回答。如果我推送标记为“192.168.1.122:5961/ubuntu:v2”的图像,我可以在端口转发“192.168.1.122: 5961”到“:5961”在我的路由器设置中?
  • 如果转发正确,这行docker pull &lt;public-ip&gt;:5961/ubuntu:v2 应该可以工作。并且拉取镜像的docker客户端配置正确
  • 如何使注册表安全?我只能使用:docker 受信任的注册表吗?
  • 您可以通过注册表配置各种安全机制。请参阅文档:docs.docker.com/registry/configuration。最低要求是配置tls,以便注册表使用HTTPS,您也可以使用客户端证书或其他一些身份验证方法,但所有这些都需要相应地配置docker客户端
  • 我的问题不好吗?如果没有,请您投票吗?此外,我会测试你的答案,然后将我的赏金奖励给你的答案......
猜你喜欢
  • 2019-03-25
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多