docker为已启动的容器添加端口映射

容器未启动

如果你的容器还没有构建时,想添加端口映射时,你只需要在创建容器的时候添加 -p 参数,想添加几个端口映射就追加几个 -p 参数。类似于如下示例:

docker run -d --privileged --name kvpt \
--network kvptnet --network-alias kvpt \
-p 443:443 \
-p 81:80 \

容器已启动

方法一

但是容器一旦生成,就没有一个命令可以直接修改。通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射。

docker stop A
docker commit A imageA #将容器commit提交成为一个镜像
docker rm A #删除原镜像
docker run -d -p 80:80 --name A imageA #启动新镜像

太麻烦了!!!

方法二
1、查看容器是否映射端口
# docker port [容器id 或 容器名]
docker port kvpt

有端口映射:

docker 容器映射端口tcp6 docker容器添加端口映射_运维

无端口映射:

docker 容器映射端口tcp6 docker容器添加端口映射_容器_02

2、查看容器完整Id
# docker inspect [容器id或容器名称] | grep Id
docker inspect kvpt | grep Id

docker 容器映射端口tcp6 docker容器添加端口映射_docker 容器映射端口tcp6_03

3、进入docker容器目录查看
  • 可以使用以下命令查看配置文件的目录
#获取Docker守护程序的详细信息,包括正在运行的容器、镜像、网络等。
docker info | grep Root

docker 容器映射端口tcp6 docker容器添加端口映射_运维_04

配置文件位置/home/docker_store/docker/containers有的位置在/var/lib/docker/containers

  • 进入目录后,根据容器Id名,进入容器对应目录

docker 容器映射端口tcp6 docker容器添加端口映射_docker 容器映射端口tcp6_05

  • 找到hostconfig.jsonconfig.v2.json配置文件,提前备份(或者复制到本地使用notepad++修改)

docker 容器映射端口tcp6 docker容器添加端口映射_运维_06

4、修改配置文件
  • 防止修改后重启容器映射端口被还原,需要先停止docker服务
systemctl stop docker

配置文件修改方法

  • hostconfig.json文件修改

docker 容器映射端口tcp6 docker容器添加端口映射_docker 容器映射端口tcp6_07

json格式化

docker 容器映射端口tcp6 docker容器添加端口映射_运维_08

  • config.v2.json文件修改
  • 具体的映射关系需要在运行容器时通过-p参数来指定。

docker 容器映射端口tcp6 docker容器添加端口映射_docker 容器映射端口tcp6_09

json格式化

"ExposedPorts"表示Docker容器暴露的端口。每个键值对表示一个端口映射。

docker 容器映射端口tcp6 docker容器添加端口映射_运维_10

"Ports"表示Docker容器内部监听的端口和它们映射到主机的端口。每个键值对表示一个端口映射,其中键是容器内部的端口号,值是一个包含主机IP和主机端口的对象数组。

**例如:**443/tcp: 映射到主机的IP地址为0.0.0.0和::,主机端口为443

docker 容器映射端口tcp6 docker容器添加端口映射_docker 容器映射端口tcp6_11

5、重启docker服务
systemctl start docker
  • 查看容器是否启动
docker ps
  • 自己的容器没有启动时,手动启动即可
docker start [容器id或容器名称]

重启后可以先查看 hostconfig.jsonconfig.v2.json 两个配置文件是否是修改过后的

6、最后再查看端口号是否有映射
docker port [容器id 或 容器名称]

docker 容器映射端口tcp6 docker容器添加端口映射_linux_12