访问不到运行在 docker 里面的 flask 应用

2020-11-24 13:00:04 +08:00
 JasonLaw

server.py 的关键内容如下:

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

Dockerfile 如下:

FROM python:3.7-buster

WORKDIR /app/

COPY ./requirements.txt /app/requirements.txt
RUN pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

COPY . /app/

EXPOSE 9000
ENV FLASK_APP=server.py
CMD python -m flask run --host=0.0.0.0 -p 9000

下面这样子可以访问到 localhost:9000 。

docker container run --name user-info-pool-service -d -p 9000:9000 user-info-pool-service

但是下面这样却不行。

docker container run --network=host --name user-info-pool-service -d user-info-pool-service

真的好奇怪,为什么呢?

3625 次点击
所在节点    Flask
9 条回复
dilu
2020-11-24 13:14:44 +08:00
大哥,你第二中方法没有映射端口啊......
kosmosr
2020-11-24 13:17:39 +08:00
了解一下-p 参数你就知道了
acmore
2020-11-24 13:39:46 +08:00
你的这两条容器运行命令都是可以的。
我按你的 scenario 测试了一下,只要删除掉 server.py 中的 main 部分就可以了,大概是这部分启动和 CMD 中的启动命令冲突了。我的 server.py 如下,其他的和你一样:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
return 'Hello, World!'
acmore
2020-11-24 13:41:13 +08:00
@dilu
@kosmosr

Docker 在 host 模式下是会直接运行在宿主机网络环境中的,此时就不需要映射端口了。
taolu
2020-11-24 13:42:41 +08:00
--network host 只适用于 Linux,不支持 win 和 mac
acmore
2020-11-24 13:45:24 +08:00
@taolu 对的,还有可能是这种情况。

"The host networking driver only works on Linux hosts, and is not supported on Docker Desktop for Mac, Docker Desktop for Windows, or Docker EE for Windows Server."
kosmosr
2020-11-24 13:55:28 +08:00
@acmore 学习到了
JasonLaw
2020-11-24 14:03:08 +08:00
@taolu #5
@acmore #6

我记起来了🤕,我之前还看过 https://github.com/docker/for-mac/issues/2716 这个 issue,就是没想起这个原因。
taolu
2020-11-24 14:05:16 +08:00
@JasonLaw #8 我也是之前踩过坑才记得

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728671

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX