如何让Web服务器从Docker容器中正常工作?

我已经configuration了Web服务器,以便在Docker容器中运行。 这一次,一个不工作。 我的Docker主机正在运行Ubuntu。 当其中包含Web服务器应用程序的Docker容器正在运行时,nmap命令显示外部IP地址和端口被“过滤”。 当Docker容器不运行时,nmap显示状态为“closures”。 这不是我所期望的。

Web浏览器显示“连接已重置”,不pipeDocker容器是否正在运行。 考虑到我所看到的nmap结果,这并不奇怪。

在支持Web服务的Docker容器中,我通常可以运行apt-get update和其他apt-get install命令。 但是我不能用这个问题容器。 我得到“失败解决'deb.debian.org'”。 我不确定这是否相关。 我试着用8.8.8.8和8.8.4.4configuration文件/etc/docker/daemon.json。 这个文件似乎没有做任何事情。 我尝试重新启动Docker服务器。

我停用了Docker服务器上的IP版本6。 我可以禁用防火墙。 为什么将Docker容器configuration为使用端口会导致在Docker容器运行时nmap命令显示端口被过滤?

我正在使用AWS服务器。 没有被注释掉的resolv.conf的内容是这些:

nameserver 172.31.0.2 search us-east-2.compute.internal 

更新/编辑。 为了回应以前的评论,我想在这里发布格式更好的信息。

curl ipinfo.io显示这个(但我用xxxxreplace了IP地址)

 { "ip": "xxxx", "hostname": "ec2-xxxx.us-east-2.compute.amazonaws.com", "city": "Columbus", "region": "Ohio", "country": "US", "loc": "39.9653,-83.0235", "org": "AS16509 Amazon.com, Inc.", "postal": "43215" } 

sudo iptables -S显示这个(但我用xxreplace了IP地址的最后两个八位字节)

 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N DOCKER -N DOCKER-ISOLATION -A FORWARD -j DOCKER-ISOLATION -A FORWARD -o br-5d57542faf97 -j DOCKER -A FORWARD -o br-5d57542faf97 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i br-5d57542faf97 ! -o br-5d57542faf97 -j ACCEPT -A FORWARD -i br-5d57542faf97 -o br-5d57542faf97 -j ACCEPT -A FORWARD -o docker0 -j DOCKER -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i docker0 ! -o docker0 -j ACCEPT -A FORWARD -i docker0 -o docker0 -j ACCEPT -A DOCKER -d 172.31.xx/32 ! -i br-5d57542faf97 -o br-5d57542faf97 -p tcp -m tcp --dport 80 -j ACCEPT -A DOCKER-ISOLATION -i docker0 -o br-5d57542faf97 -j DROP -A DOCKER-ISOLATION -i br-5d57542faf97 -o docker0 -j DROP -A DOCKER-ISOLATION -j RETURN 

更新/澄清:我使用这样的命令来创buildDocker容器:

sudo docker run –name docker -nginx -p 7777:80 –network = isolated_nw –ip 172.31.xx nginx

我创build了一个名为isolated_nw的用户定义networking。 在RedHat服务器上执行此操作时,我没有任何问题。 当Docker主机运行Ubuntu时,那是我遇到问题的时候。 我应该将这个问题移到Ubuntu论坛上吗?

另一个更新:这主要是一个networking问题(因为Web服务不工作)。 nmap命令的结果显示,当Docker容器正在运行,应该在该端口上侦听时,端口似乎被过滤。 在RedHat Docker主机上,apt-get命令无法从公共存储库包中检索,就像普通的Docker容器一样。 这个命令journalctl -u docker.service没有显示任何明显的错误,我有networking问题。

我去了获得一个.deb包的工作,以复制到一个Docker容器来安装netstat。 然后我运行这个命令:

 netstat -plnat 

我看到了这个:

 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1/nginx: master pro tcp 0 0 127.0.0.11:44720 0.0.0.0:* LISTEN - 

这可能是DNS设置问题。

用下面的内容创build一个文件/etc/docker/daemon.json

 { "dns": ["172.31.0.2"], "dns-search": ["us-east-2.compute.internal"] } 

然后重新启动泊坞窗服务。 这将为您启动的每个容器设置容器DNS