docker-compose启动的一组服务,无法访问

类似的情况,在两台服务器上都遇到了,但解决方法不太相同。分别记录一下

情景1

问题描述

docker-compose up 启动了一组服务,其中包括了一个PG数据库服务。在启动过程中,报数据库无法连接的错误。

容器启动后,发现不单是数据库无法通信,而是容器间无法通信,启动失败。

解决

docker networks 、docker inspect 查看了相关的网络信息,也查看了防火墙状态,都没有发现问题。

随后重启了服务、重启了docker,都没有解决。

最后万能的服务器重启……发现解决了。

这个描述单独看没有太大的参考价值,但由于和情景2现象较为相似,且在同一时间发生,因此统一记录一下。

情景2

问题描述

同样的一组服务,docker-compose up启动之后,容器间可以通信,但对外提供的web服务(3000端口),发现无法访问。

尝试用 telnet 来测试,发现在宿主机上使用 telnet 127.0.0.1 3000可以联通,而尝试使用宿主机ip(即telnet host_ip 3000)则失败。

解决尝试1

也尝试了情景1中的各种重启组件、查看网络相关信息的操作,发现没有解决。

随后在https://cloud.tencent.com/developer/article/1803122看到了类似的情况,于是尝试修改docker0的网段,尝试后发现失败。

service docker stop

# 关闭docker0的网卡
ip link set dev docker0 down

# 删除docker0网桥
brctl delbr docker0

# 重建docker0网桥
brctl addbr docker0

# 设置IP段
ip addr add 172.17.42.2/24 dev docker0

# 启动docker0网桥
ip link set dev docker0 up

# 重启docker引擎
service docker start

解决办法

上面提到了查看网络信息,忘记怎么想起来执行了一下 ifconfig,发现居然存在2个所起docker-compose服务的网关信息,大概如下所示:

[wang@DESKTOP-K8UBC7R system32]$ ifconfig
br-xdklfjdkfjdk: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.25.0.1  netmask 255.255.255.0  broadcast 172.25.0.255
        inet6 fe80::cb3b:32ed:42d1:4efb  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 48:2a:e3:7f:4b:39  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br-lkajfdlkj: flags=73<UP,LOOPBACK,RUNNING>  mtu 1500
        inet 172.25.0.1  netmask 255.255.255.0  broadcast 172.25.0.255
        inet6 ::1  prefixlen 128  scopeid 0xfe<compat,link,site,host>
        loop  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

此处就猜测应该是重启服务的过程中,可能出现了一些差错,导致多了一个服务的网关(虚拟网卡),因此通信出现了问题。

尝试去服务正常的服务器上查看,发现只有一个虚拟网卡。

于是尝试docker-compose down掉服务,删掉网卡,重启服务。执行后,服务正常,问题解决。

删掉虚拟网卡的过程如下:

ip link delete br-xxxxx
posted @ 2022-10-26 15:27  wswang  阅读(2629)  评论(0编辑  收藏  举报