docker / docker-compose和本地网络冲突了怎么办

docker / docker-compose和本地网络冲突了怎么办

一、docker和本地网络冲突

1.1 现象

启动docker

docker systemctl start docker

云服务器直接断开连接,之后再连接也连不上

1.2 原因

这个问题是由于办公网和docker默认docker0网卡的网关ip冲突导致的

docker默认docker0网桥的网卡是

172.xx.xx.xx

办公网的网关似乎也是172.x开头的

Last login: Sat May  6 14:47:21 2023 from 172.17.xx.xx

所以我们一旦启动docker,本地就连不到云服务器上了,需要联系运维重启

1.3 解决办法

可以设置docker默认网卡 :

执行

vim  /etc/docker/daemon.json   //如果没有该文件,请新建。

文件添加内容

{
  "bip": "192.168.1.1/24"   #自定义docker0 网桥
}

启动docker

docker systemctl start docker


二、docker-compose和本地网络冲突

1.1 现象

我们解决过docker的网卡问题了,

但直接启动docker-compose xxx.yaml up的时候,

服务器又失联了

1.2 产生原因

如果是用docker-compose 启动服务时,

docker-compose 默认也会启一个网卡,而且是以宿主机的网关为网关的网卡。

所以这才是出问题的罪魁祸首。一用docker-compose 启动服务,立马断网。

并且启动过后,你再启动docker,这边docker-compose 默认启的网桥还是会启动

然后云主机又失联了

1.3 解决办法

1.3.1 yaml文件需要增加一条配置

// 这是可以使用docker 默认网卡docker0或者其他非宿主机网关也行。当然前提是docker0 
// 已经设置为与宿主机网桥不同网关段。		
  network_mode: "bridge"

参考yaml

version: "3"
services:
  my-service:
    network_mode: "bridge"  # 使用docker的默认网卡
    restart: "always"
    container_name: "my-service"
    build:
      context: "."
      dockerfile: "my-service.dockerfile"
    ports:
      - "9022:9022"
    environment:
      SERVICE_PORT: 9022
      SERVICE_NAME: "my-service"


1.3.2 我启动过docker-compose了,docker再拉起来还是会失联

首先要删干净服务器上的docker

# 停掉正在跑的docker,如果没有在跑,不用执行
sudo systemctl stop docker
sudo docker container stop $(sudo docker container ls -aq)
# 卸载 Docker 包:
sudo yum remove docker-ce docker-ce-cli containerd.io
# 删除 Docker 数据目录:
sudo rm -rf /var/lib/docker

然后删除干净服务器上的docker-compose

# 删除 Docker Compose 可执行文件:
sudo rm /usr/local/bin/docker-compose
# 删除 Docker Compose 的软链接:
sudo rm /usr/bin/docker-compose
# 确认 Docker Compose 已经被完全删除:
docker-compose version
# 如果该命令返回 "bash: docker-compose: command not found",
# 则表示 Docker Compose 已经被完全删除。

重新安装docker

# 安装 Docker 的依赖:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 安装 Docker CE:
sudo yum install docker-ce docker-ce-cli containerd.io
# 确认参考1.3改过docker配置文件后,启动 Docker 服务:
sudo systemctl start docker

重新安装docker-compose

参考文档

# 下载dokcer-compose,
# 最好不要在网上用那个daocloud的下载链接,版本似乎有点问题
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 授予可执行权限
chmod +x /usr/local/bin/docker-compose