2017-09-02 70 views
0

我已经配置了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  - 
+0

您是否拥有企业DNS? 'cat/etc/resolv.conf' –

+0

不,它不是公司的DNS。但它是一个AWS实例。我通过编辑主文章完全回答了这个问题。请参阅主文章的最后两行以获得答案。 – Victor

+0

你能检查ufw是否启用?如果是这样,请尝试禁用它。你也可以尝试使用'--net = host'运行容器。 –

回答

0

这可能是DNS设置问题,那么。

创建一个文件/etc/docker/daemon.json下面内容

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

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

+0

不幸的是,这没有奏效;问题没有解决。我仍然无法在Docker容器中运行apt-get更新。每当Docker容器启动时,nmap命令将显示连接过滤到Docker容器侦听的端口。 – Victor

+0

你使用VPC吗?还有一个互联网网关吗?你能够使用你的机器上的'curl ipinfo.io'吗?你可以添加'iptables -S'的输出到你的问题 –

+0

不,我没有使用VPC。我可以上网。但是当我使用“ifconfig”或“ip addr show”时,我看不到任何Internet网关。其他两个问题将在主帖中显示。由于在此评论框中格式化,我将对其进行编辑。 – Victor

相关问题