无法访问 OSX 端口 80 上的 docker 容器
Can't access docker container on port 80 on OSX
在我目前的工作中,我们有使用 docker-compose 制作的开发环境。
一个容器是 nginx,它提供到其他容器的路由。
一切似乎都很好,并在 windows 和 osx 上为我的同事工作。但是在我的系统 (osx El Capitan) 上,访问 80 端口上的 nginx 容器时出现问题。
容器设置从docker-compose.yml
nginx:
build: ./dockerbuild/nginx
ports:
- 80:80
links:
- php
volumes_from:
- app
... and more
在 ./dockerbuild/nginx
中没有什么特别的,只是我们从任何地方都知道的 nginx 配置。
当我 运行 每次都用 docker-compose create
和 docker-compose start
时。然后docker ps
给我
3b296c1e4775 docker_nginx "nginx -g 'daemon off" About an hour ago Up 47 minutes 0.0.0.0:80->80/tcp, 443/tcp docker_nginx_1
但是当我尝试通过 curl 访问它时出现错误。 curl: (7) Failed to connect to localhost port 80: Connection refused
我尝试 运行 端口为 81 的容器,一切正常。
端口确实绑定到 docker
22:47 $ sudo lsof -i -n -P | grep TCP
...
com.docke 14718 schovi 38u IPv4 0x6e9c93c51ec4b617 0t0 TCP *:80 (LISTEN)
...
osx 中的防火墙已关闭,我没有其他安全措施。
如果您正在使用 docker-for-mac:
通过 localhost:80
访问是正确的,但您仍然必须确保您没有本地 apache/nginx 服务 运行ning。通常 boxen/homebrew 的遗留物绑定了那个端口,因为那是开发人员当时所做的:)
如果您正在使用 dockertoolbox/virtualbox/whatever 管理程序
你将无法通过本地主机访问它,通过 docker-machine ip,所以写 docker-machine ip default
并在你的中使用 http://$ip:80
浏览器
如果这没有帮助
确保你的 nginx 容器确实工作,所以连接到容器:docker exec -i -t <containerid> bash
然后 运行 ps aux nginx
或者如果安装了 telnet 尝试连接到 localhost
已解决!
问题是,很久很久以前我安装了 pow(超级简单的自动化 rails 服务器,运行 应用程序在 app_name.local 域上)。这个野兽留下了 LaunchAgent 脚本,该脚本更新 pf
以将端口 80 转发到 pow 端口。
In my current job we have development environment made with docker-compose.
使用特权。
[W]hen I try to access [nginx on port 80] for example via curl I get error.
鉴于没有任何原因导致您在 host os 上访问 docker,您应该查看容器内的应用程序 运行 以确保它具有绑定性到正确的 host,例如0.0.0.0
而不是 localhost
。
例如,如果你在 运行 Nuxt 的容器中 nuxt-ts
观察 Nuxt 将默认为 localhost
从而导致容器无法连接到docker 网络,而 npx nuxt-ts -H 0.0.0.0
将容器的内部服务器连接到所用 docker 网络的 ip(验证 ip,如 docker container inspect d8af01990363
)。
在我目前的工作中,我们有使用 docker-compose 制作的开发环境。 一个容器是 nginx,它提供到其他容器的路由。 一切似乎都很好,并在 windows 和 osx 上为我的同事工作。但是在我的系统 (osx El Capitan) 上,访问 80 端口上的 nginx 容器时出现问题。
容器设置从docker-compose.yml
nginx:
build: ./dockerbuild/nginx
ports:
- 80:80
links:
- php
volumes_from:
- app
... and more
在 ./dockerbuild/nginx
中没有什么特别的,只是我们从任何地方都知道的 nginx 配置。
当我 运行 每次都用 docker-compose create
和 docker-compose start
时。然后docker ps
给我
3b296c1e4775 docker_nginx "nginx -g 'daemon off" About an hour ago Up 47 minutes 0.0.0.0:80->80/tcp, 443/tcp docker_nginx_1
但是当我尝试通过 curl 访问它时出现错误。 curl: (7) Failed to connect to localhost port 80: Connection refused
我尝试 运行 端口为 81 的容器,一切正常。
端口确实绑定到 docker
22:47 $ sudo lsof -i -n -P | grep TCP
...
com.docke 14718 schovi 38u IPv4 0x6e9c93c51ec4b617 0t0 TCP *:80 (LISTEN)
...
osx 中的防火墙已关闭,我没有其他安全措施。
如果您正在使用 docker-for-mac:
通过 localhost:80
访问是正确的,但您仍然必须确保您没有本地 apache/nginx 服务 运行ning。通常 boxen/homebrew 的遗留物绑定了那个端口,因为那是开发人员当时所做的:)
如果您正在使用 dockertoolbox/virtualbox/whatever 管理程序
你将无法通过本地主机访问它,通过 docker-machine ip,所以写 docker-machine ip default
并在你的中使用 http://$ip:80
浏览器
如果这没有帮助
确保你的 nginx 容器确实工作,所以连接到容器:docker exec -i -t <containerid> bash
然后 运行 ps aux nginx
或者如果安装了 telnet 尝试连接到 localhost
已解决!
问题是,很久很久以前我安装了 pow(超级简单的自动化 rails 服务器,运行 应用程序在 app_name.local 域上)。这个野兽留下了 LaunchAgent 脚本,该脚本更新 pf
以将端口 80 转发到 pow 端口。
In my current job we have development environment made with docker-compose.
使用特权。
[W]hen I try to access [nginx on port 80] for example via curl I get error.
鉴于没有任何原因导致您在 host os 上访问 docker,您应该查看容器内的应用程序 运行 以确保它具有绑定性到正确的 host,例如0.0.0.0
而不是 localhost
。
例如,如果你在 运行 Nuxt 的容器中 nuxt-ts
观察 Nuxt 将默认为 localhost
从而导致容器无法连接到docker 网络,而 npx nuxt-ts -H 0.0.0.0
将容器的内部服务器连接到所用 docker 网络的 ip(验证 ip,如 docker container inspect d8af01990363
)。