我已经配置了Web服务器以便在Docker容器中运行。这一次,一个不起作用。我的Docker主机正在运行Ubuntu。当其中包含Web服务器应用程序的Docker容器正在运行时,nmap命令会显示外部IP地址和端口被“过滤”。当Docker容器未运行时,nmap将状态显示为“已关闭”。这完全不是我所期望的。如何让Web服务器从Docker容器正常工作?
无论Docker容器是否正在运行,Web浏览器都会显示“连接已重置”。考虑到我所看到的nmap结果,这并不令人惊讶。
在支持Web服务的Docker容器中我通常可以运行apt-get update和其他apt-get install命令。但我不能用这个问题容器。我得到“无法解决'deb.debian.org'。”我不确定这是否相关。我尝试用8.8.8.8和8.8.4.4配置文件/etc/docker/daemon.json。这个文件似乎没有做任何事情。我尝试重新启动Docker服务器。
我在Docker服务器上禁用了IP版本6。我可以禁用防火墙。为什么将Docker容器配置为使用端口会导致nmap命令显示端口在Docker容器运行时被过滤?
我正在使用AWS服务器。 resolv.conf中未被注释掉的内容是:
nameserver 172.31.0.2
search us-east-2.compute.internal
更新/编辑。为了回应以前的评论,我想在这里发布格式更好的信息。
卷曲ipinfo.io显示了这个(但我替换XXXX的IP地址)
{
"ip": "x.x.x.x",
"hostname": "ec2-x-x-x-x.us-east-2.compute.amazonaws.com",
"city": "Columbus",
"region": "Ohio",
"country": "US",
"loc": "39.9653,-83.0235",
"org": "AS16509 Amazon.com, Inc.",
"postal": "43215"
}
须藤的iptables -S显示了这个(但我换成XX的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.x.x/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
更新/澄清: 我用这样的命令来创建多克尔容器:
sudo的码头工人运行--name码头工人,nginx的-p 7777:80 - -network = isolated_nw --ip 172.31.x.x nginx
我创建了一个名为isolated_nw的用户定义网络。当我在RedHat服务器上执行此操作时,我没有任何问题。当Docker主机运行Ubuntu时,那是我遇到问题时。我应该将这个问题转到Ubuntu论坛上吗?
另一个更新:这主要是一个网络问题(因为Web服务不工作)。 nmap命令的结果显示,当Docker容器运行时应该过滤该端口,该端口应该在该端口上侦听。在RedHat Docker主机上,apt-get命令无法从公共存储库包中检索,如普通的Docker容器。这个命令journalctl -u docker.service
没有告诉我任何明显的问题,我的网络问题。
我参加了获取.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? 'cat/etc/resolv.conf' –
不,它不是公司的DNS。但它是一个AWS实例。我通过编辑主文章完全回答了这个问题。请参阅主文章的最后两行以获得答案。 – Victor
你能检查ufw是否启用?如果是这样,请尝试禁用它。你也可以尝试使用'--net = host'运行容器。 –