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
有端口映射:
无端口映射:
2、查看容器完整Id
# docker inspect [容器id或容器名称] | grep Id
docker inspect kvpt | grep Id
3、进入docker容器目录查看
- 可以使用以下命令查看配置文件的目录
#获取Docker守护程序的详细信息,包括正在运行的容器、镜像、网络等。
docker info | grep Root
配置文件位置:
/home/docker_store/docker/containers
有的位置在/var/lib/docker/containers
- 进入目录后,根据容器Id名,进入容器对应目录
- 找到
hostconfig.json
和config.v2.json
配置文件,提前备份(或者复制到本地使用notepad++修改)
4、修改配置文件
- 防止修改后重启容器映射端口被还原,需要先停止docker服务
systemctl stop docker
配置文件修改方法
hostconfig.json
文件修改json格式化
config.v2.json
文件修改
- 具体的映射关系需要在运行容器时通过
-p
参数来指定。json格式化
"
ExposedPorts
"表示Docker容器暴露的端口。每个键值对表示一个端口映射。"
Ports
"表示Docker容器内部监听的端口和它们映射到主机的端口。每个键值对表示一个端口映射,其中键是容器内部的端口号,值是一个包含主机IP和主机端口的对象数组。**例如:**443/tcp: 映射到主机的IP地址为0.0.0.0和::,主机端口为443
5、重启docker服务
systemctl start docker
- 查看容器是否启动
docker ps
- 自己的容器没有启动时,手动启动即可
docker start [容器id或容器名称]
重启后可以先查看 hostconfig.json
和 config.v2.json
两个配置文件是否是修改过后的
6、最后再查看端口号是否有映射
docker port [容器id 或 容器名称]