Mac上的Docker Beta:无法使用ip访问nginx容器

时间:2016-07-12 22:55:34

标签: macos nginx docker

我为osx安装了docker-beata(https://beta.docker.com/)。 接下来,我创建了一个包含此文件docker-compose.yml的文件夹:

web:
  image: nginx:latest
  ports:
    - "8080:80"

之后,我使用了这个命令:docker-compose up。 集装箱开始成功。

但问题是要在我的容器中访问。我不知道ip使用了什么。 我尝试使用docker psdocker inspect ...找到IP:

"Networks": {
  "bridge": {
    "IPAMConfig": null,
    "Links": null,
    "Aliases": null,
    "NetworkID": "6342cefc977f260f0ac65cab01c223985c6a3e5d68184e98f0c2ba546cc602f9",
    "EndpointID": "8bc7334eff91d159f595b7a7966a2b0659b0fe512c36ee9271b9d5a1ad39c251",
    "Gateway": "172.17.0.1",
    "IPAddress": "172.17.0.2",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "02:42:ac:11:00:02"
  }
}

因此我尝试使用http://172.17.0.2:8080/进行访问,但我遇到ERR_CONNECTION_TIMED_OUT错误。 但是,如果我使用http://localhost:8080/,我可以访问我的容器! (但我的本地主机已经在我的mac上使用我的本机配置,所以如果我想使用localhost,我必须停止我的原生apache。)

为什么它不使用ip?

4 个答案:

答案 0 :(得分:5)

正如@ Javier-Segura所提到的,在Linux上使用原生Docker你应该可以通过它的IP和端口来访问容器,所以在你的情况下http://172.17.0.2:80 - 8080端口将在主机IP上。

使用Docker for Mac Beta,它似乎对容器的工作方式不同。它在每次发布时都会发生一些变化,但现在看来你无法通过传统方式通过ip到达容器。

  

不幸的是,由于OSX的限制,我们无法路由流量   到容器,从容器回到主机。

最好的办法是使用不同的非冲突端口。您可以为不同的环境使用不同的Compose配置文件,因此,如上所示,如果需要,请使用8081进行开发,使用8080进行生产。您可以通过类似docker-compose -f docker-compose.yml -f production.yml up -d之类的东西开始撰写Compose,其中production.yml具有该环境的覆盖。

答案 1 :(得分:1)

当你映射一个端口时(就像用"8080:80"完成的那样)你基本上就是说"将我的localhost上的端口8080转发到容器上的80端口&# 34。

然后您可以通过以下方式访问您的nginx:

如果Mac上的apache已经使用了端口8080,您可以将配置更改为"8081:80",nginx将在8081上提供

答案 2 :(得分:0)

这里还有一个要添加到已经提供的好的提示。除了端口映射之外,您还可以使用-p选项包括IP映射。如果您不包含IP(类似-p 8080:80),那么您告诉docker将进入端口8080上所有接口的流量路由到docker内部网络(在您的情况下为172.17.0.2)。这包括但不限于localhost。如果您希望此映射仅应用于某个IP,例如通过DHCP动态分配给工作站的IP,则可以将选项中的IP指定为-p 10.11.12.13:8080:80(其中10.11.12.13是虚构的IP)。然后不会路由localhost或任何其他接口。

同样,您可以使用该选项将-p 127.0.0.1:8080:80限制为localhost,以便其他接口流量不会路由到docker容器的172.17.0.2接口。

答案 3 :(得分:0)

@pglezen是对的。在compose文件中提供完整的IP正在解决问题。 由docker-compose生成的映像IP地址在MAC OSX上不起作用(现在)。

在compose文件中提供特定的ip,允许访问容器图像:

nginx: image: nginx:latest ports: - "127.0.0.1:80:80" links: - php-fpm

docker-compose仍然分配了通用172. * IP地址到无法访问的图像。但真正的硬编码127.0.0.1正在运行并返回正确的容器响应。