Docker容器动态添加端口


忽然遇到一个问题怎么给一个已经在运行的docker容器添加端口,找了找资料,记个笔记。docker

参考:json

方法1 修改iptables端口映射

docker的端口映射并非在docker技术中实现的,而是经过宿主机的iptables来实现。经过控制网桥来作端口映射,相似路由器中设置路由端口映射。

好比咱们有一个容器的80端口映射到主机的8080端口,先查看iptables到底设置了什么规则:bash

sudo iptables -t nat -vnL复制代码

在结果中有一条:tcp

Chain DOCKER
target     prot opt source               destination
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.3:80复制代码

咱们能够看到docker建立了一个名为DOKCER的自定义的链条Chain。而我开放80端口的容器的ip是172.17.0.3ui

也能够经过inspect命令查看容器ip:spa

docker inspect containerId |grep IPAddress复制代码

咱们想再增长一个端口映射,好比8081->81,就在这个链条是再加一条规则:.net

sudo iptables -t nat -A  DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.3:81复制代码

若是加错了或者想修改:code

先显示行号查看cdn

sudo iptables -t nat -vnL DOCKER --line-number复制代码

删除规则3blog

sudo iptables -t nat -D DOCKER 3复制代码

方法2 修改容器配置文件

容器的配置文件/var/lib/docker/containers/[containerId]目录下,hostconfig.jsonconfig.v2.json 修改好以后,重启容器服务。

方法3 把运行中的容器生成新的镜像,而后运行新的镜像

  1. 提交一个运行中的容器为镜像
docker commit containerid heropoo/example复制代码

2.运行heropoo/example镜像并添加8080映射容器80端口

docker run -d -p 8000:80  heropoo/example /bin/sh复制代码

试试吧~😎

原文链接:

zhuanlan.zhihu.com/p/65938559

相关文章
相关标签/搜索