9

在我目前的工作中,我们有使用 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当我用and运行所有东西时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 中的防火墙已关闭,我没有其他安全措施。

4

3 回答 3

7

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

访问方式localhost:80是正确的,但您仍然必须确保您没有运行本地 apache/nginx 服务。boxen/homebrew 的剩余部分通常存在绑定该端口,因为那是开发人员当时所做的:)

如果您使用的是 dockertoolbox/virtualbox/whatever hypervisor

您将无法通过 localhost 和 docker-machine ip 访问它,因此请在浏览器中编写docker-machine ip default和使用http://$ip:80

如果这没有帮助

确保您的 nginx 容器确实工作,因此连接到容器:docker exec -i -t <containerid> bash

然后运行ps aux nginx或者如果安装了 telnet 尝试连接到 localhost

于 2016-09-18T14:41:48.613 回答
6

解决了!

问题是,很久以前我安装了 pow (超级简单的自动化 Rails 服务器,在 app_name.local 域上运行应用程序)。这只野兽离开了 LaunchAgent 脚本,该脚本更新pf为将端口 80 转发到 pow 端口。

于 2016-09-20T07:14:04.210 回答
0

在我目前的工作中,我们有使用 docker-compose 制作的开发环境。

使用特权。

[W] 当我尝试访问 [nginx on port 80] 例如通过 curl 我得到错误。

鉴于不会导致您访问主机操作系统上的 docker,您应该查看容器内运行的应用程序,以确保它绑定到正确的主机,例如0.0.0.0而不是localhost.

例如,如果您在容器中运行Nuxtnuxt-ts ,则使用observe Nuxt 将默认localhost导致容器不连接到 docker 网络,而npx nuxt-ts -H 0.0.0.0让容器的内部服务器连接到使用的 docker 网络的 ip(验证喜欢docker container inspect d8af01990363)。

于 2019-10-10T11:43:32.873 回答