docker--修改容器的映射端口

简介: docker--修改容器的映射端口

前戏


如果我们启动了一个容器,并且将宿主机的端口和容器的端口映射上了。有时候我们需要更改宿主机的端口或者要添加映射端口。这里提供三种方案


新建容器


这个解决方案最为简单,把原来的容器删掉,重新建一个。当然这次不要忘记加上端口映射。例如下面的 rabbitmq 容器,映射了三个端口到宿主机上

docker run -id --name rabbitmq  \
   -p 5672:5672  \
   -p 15672:15672 \
   -p 15692:15692 \
   -v /opt/rabbitmq/data:/var/lib/rabbitmq  \
   -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest \
   rabbitmq:3.8.3-management


修改容器配置文件


修改配置文件的话,需要停止 docker 服务

systemctl stop docker

容器的配置文件路径:cd /var/lib/docker/containers/{容器id}/hostconfig.json

我们进入到 243f14b67efbd5b841fed1f6d820f6f47370c17f251ecf3b95b89f5e255483f3/ 目录里面,这个容器就是上面的 rabbitmq 容器

打开 hostconfig.json 文件,内容如下

文件中其中有一项是 PortBindings,其中 15672/tcp 对应的是容器内部的 15672 端口,HostPort 对应的是映射到宿主机的端口 15672。5672/tcp 对应的是容器内部的 5672 端口,HostPort 对应的是映射到宿主机的端口 5672。按需修改端口

然后在修改 config.v2.json 文件

如果没有ExposedPorts 在 config.v2.json 里面添加一个配置项 "ExposedPorts":{"80/tcp":{}} , 将这个配置项添加到 "Tty": true, 前面,如果有就添加 "80/tcp":{} 端口即可。

注意:80 为实际容器需要映射的端口

然后重启docker服务,再启动容器服务就可以了

systemctl restart docker

优缺点:这个方法的优点是没有副作用,操作简单。缺点是需要重启整个docker服务,如果在同一个宿主机上运行着多个容器服务的话,就会影响其他容器服务。


利用docker commit新构镜像


docker commit:把一个容器的文件改动和配置信息 commit 到一个新的镜像。这个在测试的时候会非常有用,把容器所有的文件改动和配置信息导入成一个新的 docker 镜像,然后用这个新的镜像重起一个容器,这对之前的容器不会有任何影响。

docker stop container01  # 停止docker容器
docker commit container01 new_image:tag # commit该docker容器
docker run --name container02 -p 80:80 new_image:tag #用前一步新生成的镜像重新起一个容器

优缺点:这种方式的优点是不会影响统一宿主机上的其他容器,缺点是管理起来显得比较乱,没有第二种方法那么直观。


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
8天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
33 2
|
14天前
|
关系型数据库 MySQL API
|
6天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
8天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
8天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
10天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
10天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
10天前
|
NoSQL Redis Docker
【赵渝强老师】使用Docker Compose管理容器
Docker Compose 通过 YAML 文件管理多个容器,简化复杂系统的部署和管理。本文介绍了 Docker Compose 的基本概念,并通过一个包含 Redis DB 和 Python Web 模块的示例,展示了如何使用 Docker Compose 部署和管理多容器应用。手动部署和 Docker Compose 部署的对比突显了 Docker Compose 在系统复杂度增加时的优势。
|
10天前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
35 0
|
10天前
|
数据中心 开发者 Docker
理解并实践Docker容器化技术
理解并实践Docker容器化技术