docker容器添加对外映射端口

首次启动容器指定映射端口

在容器首次启动是,可通过-p参数(-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如:

css 复制代码
docker run -it -d --name [container-name] -p 8088:80 [image-name]

上述命令将容器内的80端口映射到宿主机的8088端口。

参数说明

  • -d 表示后台运行容器
  • -t 为docker分配一个伪终端并绑定到容器的标准输入上
  • -i 是让容器的标准输入保持打开状态
  • -p 指定映射端口

新增映射端口

当容器已经运行之后,且容器中已经有配置改动,不方便重新创建逐一修改配置时,则可通过两种方式新增端口映射。

方式一:打包新镜像

如果正在运行的容器已经修改了很多配置,重新创建镜像,修改配置比较麻烦时,可在现有的容器基础上打包一个镜像。

然后在运行新镜像时进行端口映射的新增或修改。

基本步骤:

停止指定容器:

arduino 复制代码
docker stop container-name

将容器commit成为一个镜像:

arduino 复制代码
docker commit -m "New image with my changes" my-container my-new-image

提交时可以添加一些说明信息,比如使用 -m 选项后面跟的字符串。

需要注意的是,容器在提交之前需要先停止。如果容器正在运行,则提交操作将失败。此外,提交的容器必须是基于一个基础镜像构建的,否则提交操作也将失败。

用新镜像运行容器:

arduino 复制代码
docker run -it -d --name container-name -p p1:p1 -p p2:p2 new-image-name

至此,原有容器内配置不变,在启动时进行了新的端口映射。

方式二:修改配置文件

修改配置文件,此种方式稍微有些麻烦,而且在操作过程中需要把的docker服务停掉,使用时需注意。

查看容器信息:

css 复制代码
docker ps -a

查看容器的端口映射情况,在容器外执行:

bash 复制代码
docker port d5104ec757b6
# 或
docker port nginx

查找要修改容器的容器Id:

perl 复制代码
docker inspect d5104ec757b6 |grep Id

执行命令结果:

json 复制代码
"Id": "d5104ec757b667d5647c61c9d6066fc9b7b3a675eaba6af4dc990989f78e99b7",

不同的容器Id不同,然后在/var/lib/docker/containers目录下找到与上述Id相同的目录,修改该目录下的 hostconfig.json 和 config.v2.json文件。

在修改之前,还需要停到容器和docker服务。

停掉容器:

arduino 复制代码
docker stop d5104ec757b6

停掉docker服务:

arduino 复制代码
systemctl stop docker

修改hostconfig.json,添加端口绑定"443/tcp": {"HostIp": "","HostPort": "443"},表示绑定端口443:

json 复制代码
"PortBindings":{
	"443/tcp":[{"HostIp":"","HostPort":"443"}],
 	"80/tcp":[{"HostIp":"","HostPort":"80"}]
 }

找到key为PortBindings的配置,在其value部分中新增了443相关的配置。

修改config.v2.json文件,在ExposedPorts中加上要暴露的端口,即443:

json 复制代码
"ExposedPorts":{"443/tcp":{},"80/tcp":{}}

找到key为ExposedPorts的配置,在其value部分新增443的配置。

保持配置文件,重启docker服务和容器:

sql 复制代码
systemctl start docker
docker start d5104ec757b6

此时,再用前面提到的docker port命令即可看到新增的端口已经绑定成功。

相关推荐
zmsup21 分钟前
Agent 上下文调优:结合 OpsArk 运维智能体,设计模型每一步真正需要的信息
运维·agent·上下文压缩·运维智能体·上下文调优
吴声子夜歌3 小时前
Nginx应用与运维——Nginx负载均衡应用实战(二)
运维·nginx·负载均衡
lisanmengmeng3 小时前
NRPE 添加命令(一)
linux·运维·服务器
pt10433 小时前
CML网络仿真入门-2:使用CML模拟网络实验环境
运维·网络协议
沫璃染墨4 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
HAHAXX85 小时前
电商RPA批量上架通用方案:一套流程如何同时跑通拼多多、抖店、淘宝和跨境平台
java·运维·rpa
零基础1235 小时前
LLM Agent 驱动的物模型构建:从设备手册到边缘接入的自动化实践
运维·人工智能·经验分享·python·自动化
更深兼春远6 小时前
第2篇:Dify 部署保姆级教程:用 Docker跑起来
docker·容器·dify
程序猿老A6 小时前
从入门型到企业型:云服务器开放共享型到独享型规格升级
运维·服务器
Ruiery7 小时前
Linux 6.6内核 CPU 深度解析(九):时钟与 TSC — 内核怎么从 PIT/HPET 切到 TSC
linux·运维·服务器