Docker在不删除容器的情况下修改主机的端口映射【测试成功】

艺帆风顺 发布于 2025-04-03 23 次阅读


一、问题背景

docker run -d -p 9999:8080 -i --name tomcat7 tomcat:7
  • 创建容器时,指定了端口映射(-p)

  • 如果容器运行之后发现端口需要改怎么办?

   

当前是访问 9999 端口

第一种方法:删除原有容器,重新创建新的容器

删除容器

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

修改 hostconfig.json

vim hostconfig.json

  • 输入 / ,搜索映射的端口(9999)

  • 修改端口值就行了

  • 修改完后 :wq 退出并保存此文件

重新启动 Docker 服务

systemctl stop docker

     

访问 8888 端口没问题!

注意

  • 如果想修改 Docker 容器随着 Docker 服务启动而自启动,可看:https://www.cnblogs.com/poloyy/p/13985567.html

  • 有些文章会写到还需要改  config.v2.json 里的端口,但实操了一遍并不需要

优点

直接操作配置文件没有副作用,算简单

缺点

需要暂停 Docker 服务,会影响其他正常运行的 Docker 容器

第三种方法:使用 docker commit 命令【测试成功】

停止 Docker 容器

docker stop tomcat7

使用 commit 构建新镜像

docker commit tomcat7 new_tomcat7docker

docker commit myjenkins portjenkins

 #docker commit myjenkins portjenkinssha256:afcd8efcb1df48856167fd490426edeb7bc033adf8bf620444ef1f62b1788dfb

使用新镜像重新创建一个 Docker 容器

    docker run -d -p 8888:8080 -i --name tomcat77 new_tomcat7docker ps

docker run -d -p 8888:8080 -p 10241:50000 -v /var/jenkins_mount:/var/jenkins_home -v /etc/localtime:/etc/localtime --name portjenkins portjenkins

   

修改新容器的名字

如果新容器想用回旧容器的名字,需要先删了旧容器,再改名

  1. docker rm -f tomcat7

  2. docker rename tomcat77 tomcat7

  3. docker ps

   

优点

  • 无需停止 Docker 服务,不影响其他正在运行的容器

  • 旧容器有的配置和数据,新容器也会有,不会造成数据或配置丢失,对新旧容器都没有任何影响

缺点

需要生成新的镜像和容器,管理镜像和容器的时间成本会上升

版权声明:本文内容来自CSDN:小菠萝测试笔记,遵循CC 4.0 BY-SA版权协议上原文接及本声明。本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。原文链接:https://blog.csdn.net/qq_33801641/article/details/109763244如有涉及到侵权,请联系,将立即予以删除处理。在此特别鸣谢原作者的创作。此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。