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":"9201"}],"9300/tcp":[{"HostIp":"","HostPort":"9301"}]}
文档中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
优点:可以解决问题,比较推荐
相关文章
- linux centos7 docker GPU服务器环境搭建
- Docker Compose file
- 实战 | Docker+Jmeter+InfluxDB+Grafana 搭建性能监控平台
- Docker 之 Dockerfile
- [转]深入理解Docker ulimit(docker容器启动报错library initialization failed - unable to allocate file descriptor table - out of memory问题解决)
- docker pull 失败: server misbehaving
- docker for windows--Windows 10 家庭中文版 21H2 安装Docker Desktop初体验
- docker搭建FastDFS文件系统docker安FastDFS
- win本地配置docker环境
- 【docker-oracle】java.sql.SQLException: ORA-28001: the password has expired(解决oracle密码过期)
- 通过docker安装mysql5.7稳定版
- Docker环境搭建与使用:docker仓库管理的基础用法
- Docker环境搭建与使用:docker镜像使用
- Docker环境搭建与使用:docker配置镜像加速(已阿里云为例)
- docker 学习
- 《Docker技术入门与实战》——2.3 本书环境介绍
- Ubuntu 18.04在已经安装Docker CE后如何安装NVIDIA-Docker,以使docker容器内可以使用宿主机显卡
- Windows 10家庭版安装Docker指南与windows10home 版开启Hyper-v
- 通过YUM升级centOS内核,以便安装docker
- 配置Docker中国区官方镜像http://get.daocloud.io/ 很好的一个源http://get.daocloud.io/#install-docker
- Centos 上安装Docker步骤
- 掌握docker这几招,你也能搞云计算了