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



我为 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?

正如 @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 具有该环境的覆盖。

当你映射一个端口时(就像用"8080:80"所做的那样),你基本上是在说"将我的本地主机上的端口8080转发到容器上的80端口"。

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

  • http://localhost:8080
  • http://172.17.0.2:80/(取决于网络配置)

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

这是对

已经提供的好技巧的补充。 除了端口映射之外,您还可以使用 -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,以便其他接口流量不会路由到 docker 容器的 172.17.0.2 接口。

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

在允许访问容器映像的撰写文件中提供特定 IP:

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

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

最新更新