我过去曾将web服务器配置为从Docker容器运行。这一次,其中一个不起作用。我的Docker主机正在运行Ubuntu。当其中包含web服务器应用程序的Docker容器正在运行时,nmap命令会显示外部IP地址和端口已被“过滤”。当Docker容器未运行时,nmap将状态显示为“已关闭”。这完全不是我所期望的。
无论Docker容器是否正在运行,web浏览器都会显示"The connection was reset“。考虑到我所看到的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容器会在Docker容器运行时导致nmap命令显示该端口被过滤?
我使用的是AWS服务器。未注释掉的resolv.conf内容如下:
nameserver 172.31.0.2
search us-east-2.compute.internal更新/编辑。为了回应之前的评论,我想在格式更好的地方张贴信息。
curl ipinfo.io显示了这一点(但我将IP地址替换为x.x)
{
"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"
} sudo iptables -S显示了这一点(但我将IP地址的最后两个八位字节替换为x.x)
-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更新/澄清:我使用如下命令创建Docker容器:
sudo docker run --name docker-nginx -p 7777:80 --network=isolated_nw --ip 172.31.x.x nginx
我之前创建了一个名为isolated_nw的用户定义网络。当我在RedHat服务器上执行此操作时,没有任何问题。当Docker主机运行Ubuntu时,就是我遇到问题的时候。我应该把这个问题转移到Ubuntu论坛上吗?
另一个更新:这主要是一个网络问题(因为web服务不工作)。nmap命令的结果显示,当Docker容器正在运行并侦听某个端口时,该端口似乎已被过滤。apt-get命令不能像RedHat Docker主机上的普通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 -发布于 2017-09-03 13:47:16
这可能是DNS设置问题。
创建一个包含以下内容的文件/etc/docker/daemon.json
{
"dns": ["172.31.0.2"],
"dns-search": ["us-east-2.compute.internal"]
}然后重新启动docker服务。这将为您启动的每个容器设置容器DNS
https://stackoverflow.com/questions/46018080
复制相似问题