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 ...
随机推荐
- Hive学习笔记——parse
Hive是如何解析SQL的呢,首先拿hive的建表语句来举例,比如下面的建表语句 create table test(id int,name string)row format delimited f ...
- C语言设计模式
一 .C语言和设计模式(继承.封装.多态) C++有三个最重要的特点,即继承.封装.多态.我发现其实C语言也是可以面向对象的,也是可以应用设计模式的,关键就在于如何实现面向对象语言的三个重要属性. ( ...
- Multi-Channel Buffers
This describes a 4 channels buffer of 16 bit samples.Data organisation :Sample 1, front left speaker ...
- [Mobi] cordova requirements,Exception in thread "main" java.lang.NoClassDefFoundError
Cordova App Preparation https://quasar.dev/quasar-cli/developing-cordova-apps/preparation $ cordova ...
- mysql数据库每天备份
以备份mysql下的test数据库为例,备份到/home/data 使用mysqldunp命令 dump.sh mysqldump -h127. -uadmin -P3306 -ppassword t ...
- Swarm 集群并用 Portainer 管理
https://blog.csdn.net/zhrq95/article/details/79430284 使用docker-proxy代理服务(所有节点): docker pull docker.i ...
- mysql8.0安装时,Unable to connect to any of the specified MySQL hosts
https://blog.csdn.net/u014776759/article/details/88422967
- JAVA 8 的新特性
Java8的新特性有:默认方法.函数式接口.lambda表达式.方法引用.Stream.Optional.日期API. 一.默认方法: 接口中的方法可以有方法体,但是必须要有static或者defau ...
- 类的练习2——python编程从入门到实践
9-7 管理员: 管理员是一种特殊的用户.编写一个名为Admin的类,并让它继承练习9-3或者9-5的User类.添加一个名为privileges的属性,用于存储一个由字符串(如"can a ...
- Golang 读写文件
读文件 func ReadFile_v1(filename string) { var ( err error content []byte ) fileObj,err := os.Open(file ...