无法访问OSX上端口80上的docker容器

时间:2016-09-16 21:41:52

标签: macos nginx docker port80

在我目前的工作中,我们有使用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 createdocker-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中的防火墙已关闭,我没有其他安全措施。

3 个答案:

答案 0 :(得分:5)

如果您使用的是docker-for-mac:

通过localhost:80进行访问是正确的,但仍需确保您没有运行本地apache / nginx服务。通常来自boxen / homebrew的剩余物存在绑定该端口,因为那是开发人员当时所做的事情:)

如果您使用dockertoolbox / virtualbox /任何管理程序

您将无法通过本地主机,通过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)来解决问题。