2 台虚拟机,1 个是通过命令直接起了个私有 registry
docker run -d -p 5000:5000 --restart always --name registry registry:2
一个通过 Dockerfile 新 build 的镜像,改了配置开始 push 镜像到私有仓库
结果报
Error response from daemon: Get http://192.168.50.90:5000/v2/: dial tcp 192.168.50.90:5000: connect: no route to host
结果我试了下虚拟机 2 个都能 ping 通,由于第二太机器私有仓库端口映射对外也暴露 5000
所以第一台 telnet 192.168.50.90 5000 返回
telnet: connect to address 192.168.50.90: No route to host
很纳闷,2 个防火墙都关了,总是报路由的问题,私有仓库那台映射也做了,有没有老哥或者屌大的懂哪里出问题的.....
1
luckyrayyy 2020-04-23 00:51:24 +08:00
看着不像 registry 的问题啊,俩虚拟机互相之间都没通的样子。你怀疑 registry 的话先看它的日志呗。
|
2
nvkou 2020-04-23 01:21:58 +08:00 via Android
没看懂你需求
1:同宿主机的 2 虚拟机通信。使用 network 参数分配到同一网络即可。使用 container 名称访问,自带 host 2:虚拟机 a 对宿主机发布服务。使用 port 参数映射端口。服务使用者根据网段访问宿主机 eth0 或 docker0 的地址。相关防火墙要放行 问题原因:你虚拟机 b 默认网络是网关模式,你无法从一个私有地址直接跳到另一个私有地址。论我怎么从我家的 192.168.1.2 访问到隔壁家的 192.168.1.2 ? |
3
wyzerg OP @nvkou 好像是这个原因,我主要 2 个虚拟机都在同一网段,第 1 个虚拟机构建新镜像 push 到第 2 个虚拟机的 registry 实例中,而且默认 2 台宿主机 docker0 应该都是同一网段吧,那是不是我需要更改一下第二台宿主机的 docker0 地址,只要 2 个机器 docker0 不在同一网段就行?
|
4
nvkou 2020-04-23 13:04:02 +08:00
@wyzerg 嗯?你在说啥?这 2 个虚拟机还不在同一个宿主上?
docker0 是宿主的虚拟网卡,也是 docker 网络访问外部的网关,一个宿主机一个。你可以试试这样。 ifconfig 或其他命令查询到你的 docker0 地址 比如 172.17.12.0 然后 你的 A 机器 -p 5000:5000 你的 B 机器访问 172.17.12.0:5000 就行了 |
5
wyzerg OP @nvkou 😂 是这样的...我 mac 新建 2 个虚拟机,docker1 (192.168.50.173)和 docker2 (192.168.50.90),这两个虚拟机也分别部署了 dooker cli 和 docker service,而且这 2 个虚拟机 docker0 都是 172.17.0.1/16
然后我是在 docker1 上构建新镜像 想 push 到 docker2 部署的 registry 上,docker2 是通过 docker run -d -p 5000:5000 --restart always --name registry registry:2 命令部署的,我在 docker2 进入容器 registry 看到 ip 是 172.17.0.2/16,所以 push 是 docker push 192.168.50.90:5000/hello-world 是要 push 到 docker2 上的 registry😂 您说"你的 A 机器 -p 5000:5000" 这是啥哈? |