在我目前的工作中,我们有使用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运行容器,一切正常。
港口确实绑定到码头工具
22:47 $ sudo lsof -i -n -P | grep TCP
...
com.docke 14718 schovi 38u IPv4 0x6e9c93c51ec4b617 0t0 TCP *:80 (LISTEN)
...
osx中的防火墙已关闭,我没有其他安全措施。
答案 0 :(得分:5)
通过localhost:80
进行访问是正确的,但仍需确保您没有运行本地apache / nginx服务。通常来自boxen / homebrew的剩余物存在绑定该端口,因为那是开发人员当时所做的事情:)
您将无法通过本地主机,通过docker-machine ip访问它,因此请在浏览器中编写docker-machine ip default
和使用http://$ip:80
确保您的nginx容器确实有效,因此请连接到容器:docker exec -i -t <containerid> bash
然后运行ps aux nginx
或者如果安装了telnet,请尝试连接到localhost
答案 1 :(得分:5)
解决!
问题是,很久很久以前我安装了pow(在app_name.local域上运行应用程序的超简单自动化rails服务器)。这个野兽离开了LaunchAgent脚本,更新pf
以将端口80转发到pow端口。
答案 2 :(得分:0)
在我目前的工作中,我们使用docker-compose进行开发。
使用特权。
[W]例如,当我尝试通过curl访问[端口80上的nginx]时,我会报错。
鉴于没有什么可以导致您访问主机上的docker操作系统,因此您应该查看在容器内运行的应用,以确保将其绑定到正确的主机,例如0.0.0.0
而非localhost
。
例如,如果您在具有nuxt-ts
的容器中运行Nuxt,请注意Nuxt将默认为localhost
,从而导致容器不连接到docker网络,而{{1 }}可以通过容器的内部服务器连接到所使用的docker网络的ip(验证ip为npx nuxt-ts -H 0.0.0.0
)来解决问题。