【问题标题】:Connecting to a docker localhost port from my local machine从我的本地机器连接到 docker localhost 端口
【发布时间】:2020-12-11 06:07:22
【问题描述】:

我正在一个 docker 容器中运行一个烧瓶应用程序。我想访问容器端口 8000 * Running on http://127.0.0.1:8000/

来自我的主机。

我正在运行 docker 容器

docker run -p 127.0.0.1:8080:8000 --rm $(IMAGE_NAME) /Stocks/startserver.sh

当我做docker ps 我看到以下文字

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
85168e4c963e        stocks              "/Stocks/startserver…"   12 seconds ago      Up 11 seconds       127.0.0.1:8080->8000/tcp   beautiful_bartik

当我在本地机器上打开 localhost:8080 时,我什么也看不到。 据我了解,端口是打开的,知道为什么我无法从主机连接到它吗? 有关如何为此调试解决方案的任何提示?

【问题讨论】:

  • 省略 -p 8080:8000 之类的 localhost ip 而不是 -p 127.0.0.1:8080:8000,然后再试一次。
  • “在 127.0.0.1 上运行”部分表明 Flask 应用程序未配置为侦听 0.0.0.0“所有接口”地址,这意味着无法从容器外部访问它; Deploying a minimal flask app in docker - server connection issues 对此进行了更多描述。
  • @jdickel 我已经试过了。

标签: docker dockerfile containers webserver port


【解决方案1】:

Running on http://127.0.0.1:8000/

如果那是烧瓶服务器的控制台输出,那么听起来您在容器中错误地启动了它。这看起来像 Flask 在容器内的127.0.0.1 (localhost) inside 上运行。它需要在容器的外部接口上运行!

通过以下方式启动来实现这一目标:

flask run -h 0.0.0.0

或者,如果在应用程序中使用(过时的)方法 app.run,则传递一个 host 参数:

if __name__ == '__main__':
    app.run(host='0.0.0.0',
        # Any other launch args you have
        )

0.0.0.0 是特殊地址,表示“所有接口”。

我也会采纳@jdickel 的建议,并在运行命令中省略127.0.0.1

【讨论】:

  • 这样做会使我的 CSS 导入无效。我试着做一个相对路径和一个绝对路径。我收到以下错误。 "GET /Stocks/css/style.css HTTP/1.1" 404 -" 我是这样导入的。
猜你喜欢
  • 2018-05-17
  • 2021-10-28
  • 2017-02-11
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多