docker容器添加新的端口映射

通常在运行容器时,我们都会通过参数 -p来指定宿主机和容器端口的映射,例如

docker run -it -d --restart always --name [指定容器名] -p 8899:8080 [指定镜像名]

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

参数说明
-d 表示后台运行容器
-t 为docker分配一个伪终端并绑定到容器的标准输入上
-i 是让容器的标准输入保持打开状态
-p 指定映射端口
–restart 指定容器异常停止后是否自动重启

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

一、将现有的容器打包成镜像并重新运行

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

step 1. 停止指定容器:

docker stop container-name

step 2. 将容器commit成为一个镜像:

docker commit -a "作者" -m "这里是镜像的注释" [容器名称或id] [打包的镜像名称]:[版本标签]
#常用OPTIONS说明:
#    -a :提交的镜像作者
#    -c :使用Dockerfile指令来创建镜像
#    -m :提交时的说明文字
#    -p :在commit时,将容器暂停

或者使用export和import将容器导出为镜像

docker export 容器ID > 压缩包名称.tar
cat 压缩包名称.tar | docker import - 镜像名称:版本标签
#导出
$ docker export 1efca3906 > centos.tar
#导入
$ cat docker/centos.tar | docker import - test/centos:v1

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

step 3. 用新镜像运行容器:

docker run -it -d --name container-name -p 8848:8848 -p 9848:9848 new-image-name

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

二、修改要端口映射的容器的配置文件(推荐)

step 1. 查看容器信息:

# 查看容器列表
docker ps -a

# 查看容器的端口映射情况,在容器外执行:
docker port [容器id]
# 或
docker port nginx

在这里插入图片描述
在这里插入图片描述
step 2. 查找要修改容器的容器全Id:

docker inspect [容器id或名称] | grep Id

在这里插入图片描述
step 3. 修改配置文件

进入/var/lib/docker/containers目录,找到与上述Id相同的文件夹,修改该文件夹下的 hostconfig.json 和 config.v2.json文件。

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

docker stop [容器id]
systemctl stop docker

修改hostconfig.json,找到key为PortBindings的配置,添加端口绑定"9848/tcp": [{“HostIp”: “”,“HostPort”: “9848”}],表示绑定端口9848:

"PortBindings":{
	"8848/tcp":[{"HostIp":"","HostPort":"8848"}],
 	"9848/tcp":[{"HostIp":"","HostPort":"9848"}]
 }

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

"ExposedPorts":{"8848/tcp":{},"9848/tcp":{}}

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

systemctl start docker
docker start [容器id]

你可能感兴趣的:(docker,docker,容器,运维)