如何从子网和外部世界公开访问Docker注册表
我刚刚通过以下方式运行docker注册表:如何从子网和外部世界公开访问Docker注册表,docker,docker-registry,Docker,Docker Registry,我刚刚通过以下方式运行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 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
$docker pull:5961/ubuntu:v2
请注意,我可以将机器的端口192.168.1.122转发到与本地网络有关的1的相同端口: 您的docker注册表不安全,正在使用HTTP,而不是HTTPS。因此,您需要通过如下方式更新
/etc/docker/daemon.json文件,为客户端守护程序定义一个不安全的注册表
:
{
"insecure-registries" : ["192.168.1.122:5961"]
}
见:
2关于从外部世界提取图像:
它应该按照您描述的方式工作docker pull:5961/ubuntu:v2
(只要所有客户端都将注册表定义为不安全)
但是请不要使用一个对外开放的不安全的注册表,除非你希望世界上的每个人都能获取你的图像,否则请在你的注册表服务前添加一些身份验证机制如果你想降级我的问题,请添加一条关于原因的评论@赛义德:你是说码头工人标签不是个好办法吗?!我应该用docker创建名为“192.168.1.122:5961/ubuntu:v2”的映像吗?谢谢你在不安全的注册表上给出的好答案。如果我将标记为“192.168.1.122:5961/ubuntu:v2”的图像推送到路由器设置中的端口转发“192.168.1.122:5961”之后的“docker pull:5961/ubuntu:5961”,我可以从外部世界将其拉到:5961吗?如果转发正确,这一行docker pull:5961/ubuntu:v2
应该可以工作。并且docker客户端拉取映像的配置正确如何使注册表安全?我必须只使用:docker trusted registry?您可以使用注册表配置各种安全机制。请参阅文档:。最低要求是配置tls
,这样注册表将使用HTTPS,您也可以使用客户端证书或其他一些身份验证方法,但所有这些都需要配置docker客户端。我的问题不好吗?如果没有,请投赞成票好吗?此外,我将测试你的答案,然后奖励我的奖金给你的答案。。。