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