如何访问在docker容器中运行的nginx Web服务器所服务的网页

时间:2015-08-17 08:27:39

标签: macos ubuntu nginx docker containers

我们正在尝试使用docker来运行nginx,但出于某种原因,我无法访问在docker容器内运行的 nginx Web服务器。

我们使用以下Dockerfilehttps://github.com/dwyl/learn-docker/blob/53cca71042482ca70e03033c66d969b475c61ac2/Dockerfile

启动了Docker容器

(使用nginx在端口8888上运行的基本hello世界) 要运行我们使用的容器:

docker run -it ubuntu bash

我们使用docker inspect命令确定了Container的IP地址:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' a9404c168b21

是: 172.17.0.11

当我尝试在浏览器http://172.17.0.11:8888/中访问容器的IP地址和nginx端口时,我们得到 ERR_CONNECTION_TIMED_OUT

或使用curl:

curl 172.17.0.11:8888
curl: (7) Failed to connect to 172.17.0.11 port 8888: Connection refused

为了尝试解决此问题,我们广泛搜索 ,但怀疑我们可能会问错误"问题...

2 个答案:

答案 0 :(得分:8)

您不应该尝试访问容器的IP地址,您应该使用主机的IP地址。

您缺少的是主机端口到运行nginx服务器的容器端口的映射。

假设您要在主机上使用端口8888,您需要一个这样的参数来映射端口:

docker run ... -p 8888:8888 ...

然后您应该可以通过http://<HOST_MACHINE_IP>:8888

访问您的服务器

编辑:如果您在Mac上运行,还有另一个问题。要在Mac上使用Docker,使用boot2docker时常见,但boot2docker会在另一层中添加。您需要确定boot2docker容器的IP地址,并使用它而不是localhost来访问nginx。

$ boot2docker ip

The VM's Host only interface IP address is: <X.X.X.X>

$ wget http://<X.X.X.X>:8888
...
Connecting to <X.X.X.X>:8888... connected.
HTTP request sent, awaiting response... 200 OK

参考:https://viget.com/extend/how-to-use-docker-on-os-x-the-missing-guide

编辑:...或docker-machine等效命令为docker-machine ip <machine-name>,其中<machine-name>可能是&#34;默认&#34;

答案 1 :(得分:0)

您可能需要检查容器是否正在运行:

  • docker ps(你应该有一个活动的容器)

如果没有容器处于活动状态:

  1. docker run -p 80:80 -it / bin / bash
  2. 您将在您的图像终端上
  3. 启动nginx - sudo service nginx start
  4. ctrl p + ctrl q退出泊坞窗而不退出容器
  5. 如果您使用的是mac并使用boot2docker,则无法使用localhost检查正在运行的nginx
  6. 所以请使用boot2docker ip
  7. 使用boot2docker ip浏览