docker 动态映射端口iptable
时间: 2023-11-09 22:04:58 浏览: 112
Docker 动态映射端口是指在启动 Docker 容器时,将容器内部的端口映射到宿主机的一个随机端口上,这样可以避免端口冲突的问题。而 iptables 是一个 Linux 内核中的防火墙工具,它可以对网络数据进行过滤、转发、重定向等操作,因此可以用来实现 Docker 动态映射端口。
具体来说,当启动 Docker 容器时,可以使用 `-p` 参数指定需要映射的端口,例如:
```
docker run -p 8080:80 nginx
```
这条命令将会启动一个 nginx 容器,并将容器内部的 80 端口映射到宿主机的 8080 端口上。
此时,Docker 会自动在 iptables 中添加一条规则,将外部流量转发到随机的宿主机端口。可以使用 `iptables -L -n` 命令来查看 iptables 规则,例如:
```
Chain DOCKER (2 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 172.17.0.2 tcp dpt:8080
```
这里的 `172.17.0.2` 是容器的 IP 地址,`tcp dpt:8080` 表示目标端口为 8080。可以使用 `iptables -t nat -L -n` 命令来查看 NAT 表中的规则,例如:
```
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 !172.17.0.0/16
```
这里的 `MASQUERADE` 规则会将容器内部的流量伪装成宿主机的流量,并通过 NAT 转发到外部网络。
阅读全文