我是docker的新手,我有问题让nginx运行。 一切似乎都是正确的。可以使用" curl"从主机访问nginx。 iptables为docker虚拟接口设置了一条新规则。
但是无法通过互联网访问nginx。
我正在使用debian(jessie)
Linux h2127057 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux
docker是版本
Docker version 17.03.1-ce, build c6d412e
netstat正在给予
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN
tcp 0 216 X.X.X.X:22 X.X.X.X:64103 VERBUNDEN
tcp6 0 0 :::443 :::* LISTEN
tcp6 0 0 :::514 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
iptables规则如下
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION
-N fail2ban-pam-generic
-N fail2ban-ssh
-N fail2ban-ssh-ddos
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 25 -j ACCEPT
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 465 -j ACCEPT
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 587 -j ACCEPT
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 110 -j ACCEPT
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 995 -j ACCEPT
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 143 -j ACCEPT
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 993 -j ACCEPT
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 443 -j ACCEPT
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT
正如您所看到的,另一个子网上已有规则。这是我使用普通LXC的旧虚拟基础架构。
这会让我遇到问题吗?
谢谢大家的帮助 大卫
答案 0 :(得分:0)
好的,让我们得出第一个结论:
我在LXC容器中运行Web服务器并使用iptables进行端口转发没有问题。一切正常。干得好!
如果我使用docker尝试相同的操作,即使iptables设置正确且docker正在暴露端口,也无法从外部访问Web服务器。不工作了!
停止所有容器(LXC和docker)并运行裸机网络服务器,需要在iptables中指定一个指向外部IP地址的规则。可以通过互联网访问。
那么除了docker-nginx-image之外,为什么一切都能正常工作?
非常奇怪: - (
编辑: 好的,我拥有它!杀死所有LXC和docker容器后,冲洗iptables并停止fail2ban!一切都按预期工作。即使最终启动fail2ban ......
这对我来说意味着:让docker为您管理所有iptables规则。我在iptables中不够深入,但是如果你在DOCKER链之前有一个FORWARD链,就会产生问题。