今天需要修改一个容器A的外部映射的端口,在宿主机上跑着许多容器,所以在解决这个问题的时候需要考虑两个硬性条件:

1、宿主机上docker的service服务本身不能重启,影响其他线上容器。

2、该容器A不能删除,因为有数据存在。

网上有不少的解决方案,但是在这种场景下适合的特别少,常用的有下面两种(不过对于我这次的场景来讲,只能使用方案二解决):

方案一:修改容器A配置文件,重启容器A

我们知道宿主机上默认存放所有容器的配置目录是在/var/lib/docker/containers/目录下,在该目录下有许多个容器ID的目录,每一个ID表示一个容器。因此要找到容器A的配置文件那么需要先查询出容器A的ID号即可。使用“docker ps | grep Container_Name”。得到容器A的ID号之后再去/var/lib/docker/containers/目录下使用tab键补全目录并进入即可,然后就可以看到容器A的配置文件。如下所示:

容器A的主要的配置文件是hostconfig.json这个文件,我们打开并编辑内容即可。里面的信息较多,我们只需要找到PortBindings这一行的信息,需要编辑:

"PortBindings":{"9200/tcp":[{"HostIp":"","HostPort":""}],"9300/tcp":[{"HostIp":"","HostPort":""}]}

文档中PortBings这一项中,其中“9200/tcp”是对应容器内部的9200端口。而“HostPort”:"9201"则对应的是映射到宿主机的端口9201。后面的9300端口也是统一如此。修改完端口之后,重启docker服务service即可。

缺点:此方法需要重启容器服务,因此会影响其他的docker容器,因此不建议使用。

方案二:使用docker commit新构镜像

docker commit把一个容器的文件改动和配置信息commit到一个新的镜像中,然后用这个新的镜像重启一个容器,这对之前的容器不会有影响。

主要是三步骤:

1、先stop容器A

2、commit容器A

  docker commit old_container  new_image:tag

3、使用前一步新生成的镜像重新启动一个容器。

  docker run --name container_name02 -p 9202:9200 new_image:tag

优点:可以解决问题,比较推荐

docker动态修改端口映射(考虑生产环境)的更多相关文章

  1. 如何修改运行中的docker容器的端口映射和挂载目录

    在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...

  2. 教你如何修改运行中的docker容器的端口映射

    在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...

  3. [转帖]教你如何修改运行中的docker容器的端口映射

    教你如何修改运行中的docker容器的端口映射   在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当dock ...

  4. 如何修改运行中的docker容器的端口映射

    在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...

  5. 修改docker容器的端口映射

    大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改.通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射. 有没有办法不保存镜像而直接修改 ...

  6. Docker(33)- 如何修改 docker 容器的端口映射

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 问题背景 docker run ...

  7. 修改已经创建的docker容器的端口映射

    原始链接:https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-dock ...

  8. 修改docker的port端口映射

    原以为修改docker的端口映射只是一条命令就可以搞定,结果发现没那么简单,记录一下以防忘记.1. 查看需要修改的容器,记住container iddocker ps -a2. 停止容器docker ...

  9. docker已运行容器添加或修改端口映射

    # 不推荐方法:将原来的容器提交成镜像,然后利用新的建立的镜像重新建立一个带有端口映射的容器# 推荐方法:## 查看id 就是 容器的 hash_of_the_container 数值 docker ...

随机推荐

  1. iOS - 浮点数去掉小数点之后的0,以0.5小数递增函数

    NSMutableArray *arrNumber = [NSMutableArray array]; float a = -0.5; ) { a+=0.5; NSString *str = [sel ...

  2. Docker是什么?

    Docker是什么? Docker是一个虚拟环境容器,可以将你的环境.代码.配置文件等一并打包到这个容器中,并发布和应用到任意平台中.比如,你在本地部署了git,jenkins等,可以将其与插件一并打 ...

  3. phpspreadsheet 中文文档 粗翻版

    2019年10月11日09:32:33 官方使用文档  https://phpspreadsheet.readthedocs.io/en/stable/topics/accessing-cells/ ...

  4. 【NPDP笔记】第五章 工具与度量

      5.1 创意工具 Ideation 创意开发 创意工具 Scamper Substitute Combine Adapter Modify Put to another use Eliminate ...

  5. idea springboot启动报SLF4J:Failed to load class “org.slf4j.impl.StaticLoggerBinder”

    <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artif ...

  6. C++的菱形继承会发生什么问题?如何解决?画出其内存布局图

    菱形继承问题样例: #include <iostream> using namespace std; class A { public: ; virtual int getx() { re ...

  7. 测试代码的练习2——python编程从入门到实践

    11-3 雇员:编写一个名为Employee的类,其方法__init__() 接受名.姓和年薪,并将它们都存储在属性中.编写一个名为give_raise()的方法,它默认将年薪增加5000美元,但也能 ...

  8. [开源]Gin + GORM + Casbin+vue-element-admin 实现权限管理系统(golang)

    简析 基于 Gin + GORM + Casbin + vue-element-admin 实现的权限管理系统. 基于Casbin 实现RBAC权限管理. 前端实现: vue-element-admi ...

  9. apache中的vhosts的配置。

    <VirtualHost *:80>ServerAdmin wangjiemengya@foxmail.comDocumentRoot "E:\wordDocument\www& ...

  10. 【已解决】ArcMap的界面如何恢复默认设置

    解决方案:在C盘内搜索“Normal.mxt”,将它删除,然后重启ArcMap,即可.  效果图: