【发布时间】:2017-04-25 16:23:17
【问题描述】:
我是 docker 新手,无法让 nginx 运行。 这一切似乎都是正确的。使用“curl”可以从主机访问 nginx。 iptables 为 docker 虚拟接口设置了新规则。
但是 nginx 无法从 Internet 访问。
我正在使用 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 的旧虚拟基础架构。
这会让我遇到问题吗?
感谢大家的帮助 大卫
【问题讨论】:
-
但是如果您的应用在主机上可见,在特定端口上,那么您需要做的就是向世界打开这个端口(在主机上),并最终将域添加到 etc/hosts . IMO docker 本身没什么可做的了。
-
这里是我如何将端口暴露给机器
docker run -d -p 80:80 -p 443:443 nginx -
所以现在看来你有某种路由器/防火墙/什么阻止传入端口 80/443 流量从互联网到你的主机。您需要搜索如何在您的操作系统/路由器上打开端口的指南。如果在主机上,您通过转到 localhost:80 看到 nginx 服务页面,那么在打开端口后,它将可以从 YOUREXTERNALIP:80 访问(或者 somedomain.tld,如果您将其添加到您的 etc/hosts,如 127.0.0.1 somedomain.tld)
-
这就是让我苦苦挣扎的原因:我可以轻松地使用网络服务器运行旧的 lxc 容器,并且可以毫无问题地访问它......
-
你能停止容器(LXC,docker),安装例如。本地的 apache(只是为了查看 :80 上的欢迎页面),看看您是否可以从外部访问它?如果不是,那么有一些防火墙规则可以很好地与 LXC(出于某种原因)一起使用,但不适用于其他服务......