nginx docker-image无法访问

我是新来的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 XXXX:22 XXXX: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的旧虚拟基础架构。

这可以让我得到问题吗?

谢谢大家帮助大卫

好的,让我们来看第一个结论:

在LXC容器中运行Web服务器并使用iptables进行端口转发,我没有任何问题。 一切工作正常。 很棒的工作!

如果我尝试与docker相同的话,即使iptables设置正确,docker正在暴露端口,webserver也无法从外部访问。 不工作!

停止所有容器(LXC和docker)并运行一个裸机networking服务器,它需要在iptables中指定一个指向外部IP地址的规则。 它会从互联网上到达。

那么为什么一切正常,除了docker-nginx-image?

很奇怪 :-(

编辑:好吧,我有! 杀死所有LXC和docker集装箱后,冲洗iptables并停止fail2ban! 这一切都是应该的。 毕竟,即使启动fail2ban …

这对我来说意味着:让dockerpipe理你所有的iptables规则。 我在iptables中不够深入,但是如果你在DOCKER链之前有一个FORWARD链,就会产生问题。