docker服务无法访问宿主网络

作者:Administrator 发布时间: 2025-01-07 阅读量:8 评论数:0

docker服务无法访问宿主网络

背景

操作系统:本地搭建aws linux 2023
docker版本:25.0.5
docker-compose版本:v2.32.1

问题

启动docker服务之后,显示

port 1(vethd6e3d1c)entered disabled state
port 1(vethd6e3d1c)entered blocking  state

结论

先说结论:首先尝试删除并重建网桥docker0,如果不行,再试试删除重复的虚拟网卡br-*

实践

本地启动docker-compose.yml

#[root@vm-hao-al2023 halo]# cat docker-compose.yaml 
version: "3"

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.20
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo2:/root/.halo2
    ports:
      - "8090:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    environment:
      # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=Passw0rd
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/

  halodb:
    image: mysql:8.1.0
    restart: on-failure:3
    networks:
      halo_network:
    command: 
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=Passw0rd
      - MYSQL_DATABASE=halo

networks:
  halo_network:

服务可以正常启动,但是控制台出现了错误提示,一直循环。

解决

先说结论:首先尝试删除并重建网桥docker0,如果不行,再试试删除重复的虚拟网卡br-*

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

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

首先安装brctl

发现了一个宝藏网站:Packages for Linux and Unix
提供非常全的linux和unix安装包

https://pkgs.org/

经过查找可知,brctl所在包的名字是bridge-utils,于是到上方提供的网址搜索可得到下方链接:

wget https://cdn.amazonlinux.com/2/core/2.0/x86_64/6b0225ccc542f3834c95733dcf321ab9f1e77e6ca6817469771a8af7c49efe6c/../../../../../blobstore/d1a65e70a616b9ebd4c367ecef19a31a94a1c46bf7b22f6c697cbcbd73cf496b/bridge-utils-1.5-9.amzn2.0.2.x86_64.rpm

yum localinstall bridge-utils-1.5-9.amzn2.0.2.x86_64.rpm 
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

欢迎关注我的公众号 辣个男人Devin ,新鲜技术文章第一时间推送。

参考链接:https://www.cnblogs.com/wswang/p/16828584.html

评论