首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让web服务器在Docker容器中正常工作?

如何让web服务器在Docker容器中正常工作?
EN

Stack Overflow用户
提问于 2017-09-03 04:50:18
回答 1查看 455关注 0票数 0

我过去曾将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内容如下:

代码语言:javascript
复制
nameserver 172.31.0.2
search us-east-2.compute.internal

更新/编辑。为了回应之前的评论,我想在格式更好的地方张贴信息。

curl ipinfo.io显示了这一点(但我将IP地址替换为x.x)

代码语言:javascript
复制
{
  "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)

代码语言:javascript
复制
-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。然后我运行了这个命令:

代码语言:javascript
复制
netstat -plnat

我看到了这个:

代码语言:javascript
复制
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      -
EN

回答 1

Stack Overflow用户

发布于 2017-09-03 13:47:16

这可能是DNS设置问题。

创建一个包含以下内容的文件/etc/docker/daemon.json

代码语言:javascript
复制
{
  "dns": ["172.31.0.2"],
  "dns-search": ["us-east-2.compute.internal"]
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46018080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档