【问题标题】:Connecting to flask docker container on windows browser在 Windows 浏览器上连接到烧瓶 docker 容器
【发布时间】:2021-04-17 19:47:22
【问题描述】:

我在我的 Windows 10 操作系统上运行了 docker,并且我有一个最小的烧瓶应用程序

from flask import Flask
app = Flask(__name__)
  
@app.route('/')
def hello():
    return "Hello World!"
  
if __name__ == "__main__":
    app.run(host ='0.0.0.0', port = 5001, debug = True)

我正在使用以下文件对其进行 dockerizing

FROM python:alpine3.7
COPY . /opt
WORKDIR /opt
RUN pip install -r requirements.txt
EXPOSE 5001
ENTRYPOINT [ "python" ]
CMD ["app.py", "run", "--host", "0.0.0.0"]

从我在其他帖子和 Flask 教程中看到的内容来看,当我输入 0.0.0.0:5001 时,我应该可以从 Windows Firefox 浏览器连接到 0.0.0.0:5001,但它没有连接,我不断收到“无法连接” ' 信息。我记得使用0.0.0.0:port 在 linux ubuntu 机器上连接本地主机,但无论出于何种原因,它都不允许我在 Windows 上连接。 windows 上是否有特殊的连接设置?

【问题讨论】:

  • 你是如何启动容器的? 0.0.0.0 是一个特殊的 IPv4 地址,意思是“无处不在”;您需要监听“everywhere”以接受来自容器外部的连接,但连接到“everywhere”或在 URL 中包含 0.0.0.0 是没有意义的。
  • 不要在浏览器中连接到 0.0.0.0:5001,连接到 127.0.0.1:5001
  • 谢谢@jbabtieu,我终于让它工作了。解决方案是让 docker 从 0.0.0.0:5001 开始,但在 windows 的 chrome 浏览器上使用 127.0.0.1:5001 来访问该站点。我很困惑,因为在 linux 中你只会让 docker 从 0.0.0.0:5001 开始,然后在 linux 的浏览器中尝试 0.0.0.0:5001

标签: python docker flask


【解决方案1】:

在 Docker 容器中,私有端口是5001。然后,在运行容器时,这个私有端口需要映射到一个 public 端口。例如,要将公共端口设置为 8000,您可以运行:

$ docker run --publish 8000:5001 --name <docker-container> <docker-container>:<version-tag>

Flask 应用程序随后可通过 URL 访问:http://127.0.0.1:8000

Dockerfile

此外,由于在 app.py 中设置了主机和端口,因此无需在 Dockerfile CMD 中指定这些值。但是需要公开公共端口(在本例中为 8000)。

看起来COPY 命令将所有内容放在/opt 目录下,因此在 Docker 中启动 Flask 应用程序时需要将其包含在应用程序路径中。

FROM python:alpine3.7
COPY . /opt
WORKDIR /opt
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python", "/opt/app.py"]

Docker-Flask 示例

有关完整的 Flask-Docker 示例,包括使用 Gunicorn,请参阅:

Docker Python Flask Example using the Gunicorn WSGI HTTP Server

【讨论】:

    猜你喜欢
    • 2019-07-13
    • 1970-01-01
    • 2020-06-17
    • 2016-11-19
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多