Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Mac上的Docker Beta:无法使用ip访问nginx容器_Macos_Nginx_Docker - Fatal编程技术网

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

Macos Mac上的Docker Beta:无法使用ip访问nginx容器,macos,nginx,docker,Macos,Nginx,Docker,我为osx安装了docker beata()。 接下来,我用这个文件创建了一个文件夹docker compose.yml: web: image: nginx:latest ports: - "8080:80" 之后,我使用了以下命令:docker compose up。 容器从成功开始 但问题是如何在我的容器中访问。我不知道ip使用什么。 我尝试使用docker ps和docker inspect…查找ip: "Networks": { "bridge": { "

我为osx安装了docker beata()。 接下来,我用这个文件创建了一个文件夹
docker compose.yml

web:
  image: nginx:latest
  ports:
    - "8080:80"
之后,我使用了以下命令:
docker compose up
。 容器从成功开始

但问题是如何在我的容器中访问。我不知道ip使用什么。 我尝试使用
docker ps
docker 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/
访问,但我有一个
错误连接\u超时
错误。 但是,如果我使用
http://localhost:8080/
,我可以访问我的容器! (但是我的本地主机已经被我的mac上的本机配置使用,所以如果我想使用本地主机,我必须停止我的本机apache)

为什么它不能与ip一起工作?

当你映射一个端口时(就像用
完成的“8080:80”
),你基本上是说“将本地主机上的端口
8080
转发到容器上的
80
端口”

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

  • (取决于网络配置)

如果mac上的apache已经使用了8080端口,您可以将配置更改为
“8081:80”
,nginx将在
8081
上可用,正如@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的方式在生产环境中开始编写,其中production.yml具有该环境的覆盖。

这里还有一个技巧可以添加到已经提供的好技巧中。除了端口映射之外,还可以使用
-p
选项包括IP映射。如果您不包括IP(类似于
-p8080: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)。然后本地主机或任何其他接口将不会被路由


同样,您可以使用该选项通过
-p 127.0.0.1:8080:80
限制本地主机,以便其他接口通信不会路由到docker容器的172.17.0.2接口。

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

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

nginx:
图片:nginx:latest
端口:
- "127.0.0.1:80:80"
链接:
-php fpm

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