docker动态修改端口映射(考虑生产环境)
今天需要修改一个容器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动态修改端口映射(考虑生产环境)的更多相关文章
- 如何修改运行中的docker容器的端口映射和挂载目录
在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...
- 教你如何修改运行中的docker容器的端口映射
在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...
- [转帖]教你如何修改运行中的docker容器的端口映射
教你如何修改运行中的docker容器的端口映射 在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当dock ...
- 如何修改运行中的docker容器的端口映射
在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...
- 修改docker容器的端口映射
大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改.通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射. 有没有办法不保存镜像而直接修改 ...
- Docker(33)- 如何修改 docker 容器的端口映射
如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 问题背景 docker run ...
- 修改已经创建的docker容器的端口映射
原始链接:https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-dock ...
- 修改docker的port端口映射
原以为修改docker的端口映射只是一条命令就可以搞定,结果发现没那么简单,记录一下以防忘记.1. 查看需要修改的容器,记住container iddocker ps -a2. 停止容器docker ...
- docker已运行容器添加或修改端口映射
# 不推荐方法:将原来的容器提交成镜像,然后利用新的建立的镜像重新建立一个带有端口映射的容器# 推荐方法:## 查看id 就是 容器的 hash_of_the_container 数值 docker ...
随机推荐
- nginx http和https共存
server { listen 80 default backlog=2048; listen 443 ssl; server_name linuxyan.com; root /var/www/htm ...
- 多用户远程连接设置(WindowsServer2008/Win7)
一.Windows server2008 1.点击计算机--->右键属性打开系统对话框.进行如图设置. 2.在开始菜单--->运行中输入gpedit.msc打开本地组策略编辑器对话框. 3 ...
- [LeetCode] 641.Design Circular Deque 设计环形双向队列
Design your implementation of the circular double-ended queue (deque). Your implementation should su ...
- 远程控制分析之VBS编码转换
简介 分析这种VBS简单chr()函数编码的脚本技巧.只需要把vbs的execute()函数换成信息输出到控制台(dos窗口)函数就可以了. WSH.Echo "print your mes ...
- replace into 详解 update mysql
转replace 与 update 区分本文主要对比一下 Sqlite 中的 replace 语句和 update 语句 . 在本例中使用如下数据库表: 图1 该表的表名为student, 存储学 ...
- Dockerfile HEALTHCHECK健康检查
Dockerfile中使用HEALTHCHECK的形式有两种: 1.HEALTHCHECK [options] CMD command 2.HEALTHCHECK NODE 意思是禁止从父镜像继承的H ...
- Maven手动导本地jar到项目
第一步:先把目标jar安装在本地,下面是安装到本地的步骤:在cmd命令中,输入:mvn install:install-file -Dfile=C:\Users\Ter\Desktop\jqd_doc ...
- 1.3 LVM条带化
1.什么是条带化 磁盘冲突:当多个进程同时访问一个磁盘时,可能会出现磁盘冲突.磁盘系统对访问次数(每秒的IOPS)和数据传输速率(读写速率,TPS)有限制.当达到这些限制时,后面需要访问磁盘的进程就需 ...
- ClickHouse中的循环复制集群拓扑
关系型数据库,但千万级表关联数据库基本上不太可能做到秒出:考虑过Sharding,但数据量大, 各种成本都很高:热数据存储到ElasticSearch,但无法跨索引关联,导致不得不做宽表, 因为权限, ...
- Python有用的内置函数divmod,id,sorted,enumerate,input,oct,eval,exec,isinstance,ord,chr,filter,vars,zip
divmod(a, b) 函数接收两个数字类型(非复数)参数,返回一个包含商和余数的元组(a // b, a % b) id() 函数用于获取对象的内存地址. sorted(iterable, key ...