簡體   English   中英

無法在 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 createdocker-compose start運行所有內容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訪問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

解決了!

問題是,很久很久以前我安裝了pow(在app_name.local域上運行應用程序的超簡單自動化rails服務器)。 這個野獸離開了LaunchAgent腳本,它更新了pf以將端口80轉發到pow端口。

在我目前的工作中,我們有使用 docker-compose 制作的開發環境。

使用的特權。

[W] 當我嘗試訪問 [nginx 在端口 80] 時,例如通過 curl 出現錯誤。

鑒於沒有任何原因導致您訪問主機操作系統上的 docker,您應該查看在容器內運行的應用程序,以確保它綁定到正確的主機,例如0.0.0.0而不是localhost

例如,如果您在帶有nuxt-ts的容器中運行Nuxtnuxt-ts注意 Nuxt 將默認為localhost從而導致容器無法連接到npx nuxt-ts -H 0.0.0.0網絡,而npx nuxt-ts -H 0.0.0.0事情與容器的內部服務器連接到所使用的docker container inspect d8af01990363網絡的 ip(驗證 ip,如docker container inspect d8af01990363 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM