【问题标题】:How to access python flask application in windows when running it in a linux container?在 linux 容器中运行时如何在 windows 中访问 python flask 应用程序?
【发布时间】:2018-06-08 12:44:31
【问题描述】:

我正在开发一个用 python 编写的微服务。我的微服务在我的 Windows 机器上运行良好,我可以轻松地对其进行测试。但是,在我的 Linux 容器上它也可以正常工作,但我无法对其进行测试。即使按照here 的说明优化我的网络访问代码。

这是我的微服务:

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run(host='0.0.0.0')

- 我通过在命令提示符下键入在 Windows 上运行来测试:

python.exe app.py

- 我收到一条以

结尾的消息

http://0.0.0.0:5000/ 上运行(按 CTRL C 退出)。

为了测试我的微服务,我执行了浏览器来访问: http://localhost:5000/

我可以看到“Hello World”消息。所以我的应用程序似乎运行良好。

在那之后,我开始使用 docker。这是我的 Dockerfile(名为“Dockerfile”)。

FROM python
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential
RUN pip install Flask
COPY . /app
WORKDIR /app
ENTRYPOINT ["python3"]
CMD ["app.py"]

这是我的构建命令:

docker build -t docktoflask .

考虑到构建过程,它显示了一些输出。

然后我开始用这个命令运行容器:

docker run -p 5002:5002 docktoflask

我收到了与在 windows 上相同的结束消息(这很了不起,因为我指定了端口 5002)。

之后,我尝试使用此链接进行测试: http://localhost:5002/

(当然我也试过http://localhost:5000/

没有成功....(这意味着浏览器错误而不是 hello world 消息)。错误是荷兰语(我的浏览器语言),但含义与this 相同。

这很烦人,因为它似乎可以工作并且端口确实处于活动状态。 有两个应用程序,我应该可以从我的浏览器(portainer 和我自己的应用程序)访问。我可以毫无问题地访问搬运工。在 docker 容器中运行时,如何访问我的微服务?

【问题讨论】:

    标签: python-3.x docker networking flask


    【解决方案1】:

    命令

    docker run -p 5002:5002 docktoflask
    

    表示内部容器端口5002将暴露为主机端口5002(localhost:5002),即使内部容器端口5002尚未打开。

    你必须把它改成

    docker run -p 5000:5000 docktoflask
    

    【讨论】:

    • 谢谢。 “docker run -p 5002:5000 docktoflask” 也可以,因为 5002 在我正在处理的 windows 环境中打开。
    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2018-10-21
    • 2022-07-07
    相关资源
    最近更新 更多