Python docker网络问题
我有一个python flask项目,它应该是一个用于内部网络的web应用程序。它位于docker映像中,该映像以docker compose文件开始 有时,当我运行它时,flask服务器无法从外部世界获取消息。我想这一定是docker compose自动创建的docker网络的问题。每当这个问题发生时,我必须重新启动盒子,然后把容器带回来,它会自行修复 还有谁见过这个吗 当我说它看不到盒子外的连接时,我的意思是HTTP请求永远不会到达flask服务器。我可以尝试从另一台机器转到对应于flask服务器的URL,但flask服务器什么也看不到。但是,如果我尝试从盒子内部(不是在容器内部,而是在容器运行的盒子上)发送HTTP GET请求,flask服务器会做出响应 因此,这让我相信docker compose正在创建一个docker网络,该网络没有正确配置以允许容器侦听外部请求 这是我的docker撰写文件:Python docker网络问题,python,docker,flask,docker-compose,Python,Docker,Flask,Docker Compose,我有一个python flask项目,它应该是一个用于内部网络的web应用程序。它位于docker映像中,该映像以docker compose文件开始 有时,当我运行它时,flask服务器无法从外部世界获取消息。我想这一定是docker compose自动创建的docker网络的问题。每当这个问题发生时,我必须重新启动盒子,然后把容器带回来,它会自行修复 还有谁见过这个吗 当我说它看不到盒子外的连接时,我的意思是HTTP请求永远不会到达flask服务器。我可以尝试从另一台机器转到对应于flask
version: '3.7'
services:
falcon:
image: "company.com/internal/falcon:0.1"
container_name: falcon
env_file:
- ~/.env
ports:
- "80:80"
volumes:
- ${REPOS}/falcon:/app
command: /conda/bin/falcon start
这还没有得到广泛的测试,但似乎已经解决了问题:
version: '3.7'
services:
falcon:
image: "company.com/internal/falcon:0.1"
container_name: falcon
network_mode: bridge # also tried host, I think bridge is right.
另一种解决方案似乎忽略了上面的网络模式,并将其放在下面:
networks:
default:
external:
name: prod_default
我仍然不知道为什么会发生这种情况,但这两种解决方案似乎都能解决问题。尝试使用
network=host
来解决问题,如果问题仍然存在,您的app.run()看起来怎么样?1) 您正在使用端口80
,但默认值为5000
,因此请使用端口:-“80:5000”
。2) Flask默认主机是localhost
,但要使其在docker外部可访问,您需要使用0.0.0
*@BrunoLubascher是的,对不起,我已经解决了这些问题。确实,我认为这与linux和docker compose的关系比它与flask的关系更大。