【问题标题】:Docker: cannot open port from container to hostDocker:无法打开从容器到主机的端口
【发布时间】:2017-04-11 04:01:21
【问题描述】:

我正在使用Docker for Mac。我有一个运行服务器的容器,例如我的服务器在端口 5000 上运行。我在 Dockerfile 上公开了这个端口

当我的容器运行时,我连接到该容器并通过运行以下命令检查该服务器是否正常工作,并查看它是否返回数据(一堆 html 和 javascript)

wget -d localhost:5000

注意,我启动这个容器并通过命令在外部发布端口:

docker run -d -p 5000:5000 <docker_image_name>

但在 docker 主机(是我的 mac 并运行 El Capitan),我打开 chrome 并转到地址 localhost:5000。它不起作用。请注意,如果我转到任何任意端口,例如 localhost:4000,我会看到来自 chrome 的错误消息,例如:

This site can’t be reached
localhost refused to connect.

localhost:5000 的错误消息是:

The localhost page isn’t working
localhost didn’t send any data.

所以看来我已经“稍微”配置了工作,但出了点问题。请告诉我如何解决这个问题。

【问题讨论】:

    标签: docker dockerfile docker-networking


    【解决方案1】:

    请检查容器中的程序是否正在监听 0.0.0.0 接口。

    在容器中,运行命令:

    ss -lntp
    

    如果它看起来像:

    LISTEN  0   128   127.0.0.1:5000  *:*
    

    这意味着您的 Web 应用程序仅在 localhost 上侦听,因此容器主机无法访问您的 Web 应用程序。您应该通过更改您的 Web 应用构建设置让您的服务器在 0.0.0.0 接口上监听。

    例如,如果您的服务器是 nodejs 应用程序:

    var app = connect().use(connect.static('public')).listen(5000, "0.0.0.0");
    

    如果你的服务器是 web pack:

     "scripts": {
        "dev": "webpack-dev-server --host 0.0.0.0 --port 5000 --progress"
      }
    

    【讨论】:

    • 经过几个小时的搜索,您的回答救了我。谢谢!
    【解决方案2】:

    我在使用 Docker for Mac 时遇到了这个问题,试图运行 Angular2 应用程序。

    我通过将 package.json 更改为

    解决了这个问题
     "scripts": {
        ...
        "start": "ng serve -H 0.0.0.0", # before, this was "start": "ng serve"
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      相关资源
      最近更新 更多