docker 环境下 ip 冲突处理
问题
医疗场景下大多是自建机房与网络,不同的医院对IP的规划有不同的套路,正好就碰上一个客户用的172的网段,一个院区的网断就跟docker0 和 docker_gwbridge冲突了。
解决
我们的程序用的是docker swarm,通过portainer进行管理。
1. 保存docker swarm 的 config
因为用到了 docker swarm 的config 作为配置,所以需要保存下来(secret 同理);
#! /bin/bash
# 备份脚本
for config in `sudo docker config ls -q`;do
filename=$(sudo docker config inspect $config | grep Name | sed -e 's/"Name": "//g' -e 's/",//g' -e 's/ //g')
sudo docker config inspect $config | grep Data | sed -e 's/."Data": "//' -e 's/"//g' -e 's/ //g' | base64 -d >configs/$filename
echo "${filename} 已导出"
done
echo "全部完成"
#! /bin/bash
# 还原脚本
for config in `ls configs`;do
sudo docker config create $config configs/$config
done
2. 在portainer里面删除所有的stack
因为用portainer部署的程序,所以portainer数据库中记录了已部署的stack的信息,如果直接用docker stack rm
删除,到时候portainer部署的时候会报stack已存在;
3. 删除所有的config
既可以在portainer中进行删除,也可以用命令,portainer本身没保存这个数据。
4. 删除 portainer 的stack
5. 移除 docker swarm
`sudo docker swarm leave --force`
6. 修改docker ip
6.1 修改 docker0
在 /etc/docker/daemon.json
中添加
{
"bip": "51.17.0.1/16"
}
然后重启docker服务sudo systemctl restart docker
6.2 修改 docker_gwbridge
docker_gwbridge 会在 init 或者 join 一个docker swarm 集群的时候创建,所以我们只需要在之前创建即可,若已经重建过集群需先删除sudo docker network rm docker_gwbridge
。
然后重新创建一个想要的ip段的 docker_gwbridge
sudo docker network create --subnet 51.18.0.1/16 --opt com.docker.network.bridge.enable_ip_masquerade=true --opt com.docker.network.bridge.enable_icc=false --opt com.docker.network.bridge.name=docker_gwbridge docker_gwbridge
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构