本文主要是介绍iManager Docker环境ip冲突解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作者:doremi
iManager介绍
Docker是一种容器化新技术,把应用+依赖环境打包成标准单元(容器),使应用忽略部署环境的差异,越来越多的行业在用Docker规范部署、提高效率。iManager 9D提供全套SuperMap GIS平台Docker镜像,提供GIS站点、数据库、智慧城市应用等多类组合模板,支持UI查看、监控、操作等,支持多租户、动态伸缩,协助更便捷地打造高性能云GIS方案。
Docker网络
iManager使用docker环境时,docker网络模式默认使用的bridge模式,当我们创建容器时,每个容器会有它自己的虚拟网络接口连接到桥接网络docker0,并获取一个ip。可以通过ifconfig docker0查看docker0的信息,使用route -n命令可以看到,docker会默认占用三个网段,172.17.0.0,172.18.0.0,172.19.0.0
在实际使用环境中,有可能咱们局域网内已经将这些网段分配到了其他的工作区域中,如果在这些工作区域中去访问此环境下的docker服务,是无法正常访问的。那么这时候就只有两种解决办法,将已分配的工作区域的网段换成其他网段,或者将docker占用的网段指定成其他网段,显然前者相对来说成本要稍高些。所以今天咱们就来看看如何将docker network占用的网段指定成其他的网段以避免ip冲突。
解决步骤
- 停掉docker服务
如果是使用的是ova包或者是openstack的镜像包环境,可以省略这一步service docker stop
- 创建新的docker network桥接网络
使用docker create命令创建一个新的网络配置,以下创建了一个网段为182.17.0.0的网络docker network create --subnet=182.17.0.0/16 --gateway=182.17.0.1 mynetwork
- 修改docker-compose.yml配置文件
在iManager的文件夹下面找到docker-compose.yml文件,进行编辑。
在配置文件的最下面将network的default修改成我们新创建的网络networks:mynetwork:external: true
然后还需要将每个容器的networks也修改成我们新创建的网络,需要注意的是nginx容器不要修改,因为它使用的是host模式。
- 重启docker服务 ,重启iManager
重启iManager,在iManager的文件夹下执行start.sh脚本,如果是使用的是ova包或者是openstack的镜像包环境,可以跳过上一步,直接重启iManager。重启可以看到容器除了nginx都重新创建了。service docker restart
./start.sh
- 验证是否使用上了新创建的网络,确保除了Nginx容器外其他的容器都使用上新创建的网络
docker inspect mynetwork
以上,可以看出除了nginx容器,其他的容器都使用上我们创建的新网络,说明配置是成功了 - 移除以前的网络配置
查看docker network所有的网络配置,使用docker network rm删除之前使用的网络docker network ls docker network rm imanager_default
如果还有容器在使用之前的网络,移除是会报错的,将docker-compose.yml中未修改networks的容器修改之后执行./start.sh重启,再进行移除
最后我们还需要停用之前的虚拟网卡,不然ip依然会冲突,使用route -n查看当前还在使用的路由,停用掉172.17.0.0和172.18.0.0网卡// 查看路由 route -n //停用网卡 ifconfig docker0 down ifconfig docker-sys down
到这里我们已经成功把docker使用的网段修改成了182.17网段了,在172.17.0.0,172.18.0.0,172.19.0.0三个网段环境下就能正常访问imanager和其他暴露出来的docker服务了
这篇关于iManager Docker环境ip冲突解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!