iManager Docker环境ip冲突解决方案

2024-02-25 09:58

本文主要是介绍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冲突。

解决步骤
  1. 停掉docker服务
    service docker stop
    
    如果是使用的是ova包或者是openstack的镜像包环境,可以省略这一步
  2. 创建新的docker network桥接网络
    使用docker create命令创建一个新的网络配置,以下创建了一个网段为182.17.0.0的网络
    docker network create --subnet=182.17.0.0/16 --gateway=182.17.0.1 mynetwork
    
  3. 修改docker-compose.yml配置文件
    在iManager的文件夹下面找到docker-compose.yml文件,进行编辑。
    在配置文件的最下面将network的default修改成我们新创建的网络
    networks:mynetwork:external: true
    
    在这里插入图片描述
    然后还需要将每个容器的networks也修改成我们新创建的网络,需要注意的是nginx容器不要修改,因为它使用的是host模式。
    在这里插入图片描述
  4. 重启docker服务 ,重启iManager
    service docker restart
    
    重启iManager,在iManager的文件夹下执行start.sh脚本,如果是使用的是ova包或者是openstack的镜像包环境,可以跳过上一步,直接重启iManager。重启可以看到容器除了nginx都重新创建了。
    ./start.sh
    
  5. 验证是否使用上了新创建的网络,确保除了Nginx容器外其他的容器都使用上新创建的网络
    docker inspect mynetwork
    
    在这里插入图片描述
    在这里插入图片描述
    以上,可以看出除了nginx容器,其他的容器都使用上我们创建的新网络,说明配置是成功了
  6. 移除以前的网络配置
    查看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冲突解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745126

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

SpringBoot3匹配Mybatis3的错误与解决方案

《SpringBoot3匹配Mybatis3的错误与解决方案》文章指出SpringBoot3与MyBatis3兼容性问题,因未更新MyBatis-Plus依赖至SpringBoot3专用坐标,导致类冲... 目录SpringBoot3匹配MyBATis3的错误与解决mybatis在SpringBoot3如果

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到

Java中InputStream重复使用问题的几种解决方案

《Java中InputStream重复使用问题的几种解决方案》在Java开发中,InputStream是用于读取字节流的类,在许多场景下,我们可能需要重复读取InputStream中的数据,这篇文章主... 目录前言1. 使用mark()和reset()方法(适用于支持标记的流)2. 将流内容缓存到字节数组