问题背景
docker run -d -p 9999:8080 -i --name tomcat7 tomcat:7
删除原有容器,重新创建新的容器
删除容器
docker rm -f 容器ID/名字
重新创建容器
docker run -d -p 8888:8080 -i --name tomcat7 tomcat:7
重新指定需要映射的端口
优点
简单粗暴,在测试环境用的更多
缺点
如果是数据库、服务器相关的容器,创建新的容器,又得重新配置相关东西了
修改容器配置文件(重点)
暂停 Docker 服务
systemctl stop docker
进入 Docker 容器配置文件目录下
cd /var/lib/docker/containers/ls
容器ID 就是文件夹名称,可通过 docker ps -aq 来查看,不过这是缩写,对照起来看就行
cd c614b6db4aed0c8d0c742baa09ff4e2c24761703586460b68633d7b66e62c633ls
vim hostconfig.json
- 输入 / ,搜索映射的端口(9999)
- 修改端口值就行了
- 修改完后 :wq 退出并保存此文件
重新启动 Docker 服务
systemctl stop dockerdocker start tomcat7docker ps
访问 8888 端口没问题!
注意
有些文章会写到还需要改 config.v2.json 里的端口,但实操了一遍并不需要
优点
直接操作配置文件没有副作用,算简单
缺点
需要暂停 Docker 服务,会影响其他正常运行的 Docker 容器
使用 docker commit 命令
停止 Docker 容器
docker stop tomcat7
使用 commit 构建新镜像
docker commit tomcat7 new_tomcat7docker images
使用新镜像重新创建一个 Docker 容器
docker run -d -p 8888:8080 -i --name tomcat77 new_tomcat7 docker ps
修改新容器的名字
如果新容器想用回旧容器的名字,需要先删了旧容器,再改名
docker rm -f tomcat7 docker rename tomcat77 tomcat7 docker ps
优点
- 无需停止 Docker 服务,不影响其他正在运行的容器
- 旧容器有的配置和数据,新容器也会有,不会造成数据或配置丢失,对新旧容器都没有任何影响
缺点
需要生成新的镜像和容器,管理镜像和容器的时间成本会上升
修改主机 iptables 端口映射
网上很多文章都有这个方法,但是我实操了一遍是不行的,不知道是不是步骤错了,哪位大佬知道可否说一声捏
来源:oschina
链接:https://my.oschina.net/u/4479011/blog/4722135