我已经安装了 docker - 如何编辑机器的 iptables?

我已经安装了 docker - 如何编辑机器的 iptables?

在安装了 docker 的机器上,我正在执行sudo iptables -L,并得到:

root@dockertest:~# iptables -nvL
Chain INPUT (policy ACCEPT 8364 packets, 729K bytes)
 pkts bytes target     prot opt in     out     source               destination   

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 7868 packets, 515K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain DOCKER (1 references)
 pkts bytes target     prot opt in     out     source               destination 

我在这里看到的是我机器的正确 ipTables 吗?或者如何编辑物理机 iptables?

我想让 22000 从外部通过,目前它似乎被关闭了:

nmap -sV -p 22000 1.2.3.4 
Host is up (0.038s latency).
PORT      STATE  SERVICE VERSION
22000/tcp closed unknown

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.73 seconds

上面不是和iptable矛盾吗?

总结我需要将 22000 转发到 Docker 容器。本质上,来自外部世界的客户端必须通过物理机的 iptables,然后通过 Docker 正在运行的任何防火墙

答案1

Docker 不是“运行防火墙”它本身使用主机 iptables 并且其规则绑定到 docker 桥接接口(docker0默认)。

当你想将主机的端口转发到docker容器时,你不需要编辑iptables规则,docker run 提供选择 -p hostPort:containerPort执行此操作并将自行处理所有 iptables 规则。

集装箱港口必须在 Dockerfile 中暴露给 Docker Bridge

例如,假设您要运行一个 nginx 容器并将其端口 80 公开到主机的端口 20000,那么您将运行:

docker run -d -p 20000:80 nginx:latest

相关内容