You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用docker-compose无法从localhost访问Docker中Flask应用的问题

搞定 Docker Compose 里 Flask 应用无法访问的问题

嘿,我一眼就看出问题出在哪了——你用 docker-compose run 启动服务的方式不对!

核心原因

docker-compose run 这个命令有个容易踩坑的特性:它默认会忽略 docker-compose.yml 里定义的端口映射配置。这就是为啥你用 docker run 能正常访问,但换用 docker-compose run 就不行的关键原因。

两种快速解决办法

办法1:用标准的 docker-compose up 启动

这是最推荐的方式,完全遵循你配置文件里的所有规则,包括端口映射:

docker-compose up web

要是想让服务在后台默默运行,加个 -d 参数就行:

docker-compose up -d web

办法2:给 docker-compose run 加端口参数

如果你非要用 run 命令,那得加上 --service-ports 让它启用配置里的端口映射:

docker-compose run --service-ports web

或者直接手动指定端口映射也可以:

docker-compose run -p 5000:5000 web

给你的配置提个小优化建议

你的配置已经很规范了,不过有个小细节可以调整:

  • Dockerfile 里的 EXPOSE 5000 留着挺好,它是个文档性的声明,告诉别人这个容器监听5000端口,不影响实际功能。
  • docker-compose.yml 里的 expose: - '5000' 可以删掉,因为 ports 已经包含了外部端口映射的功能,expose 只是在容器内部暴露端口,对外部访问没啥用。

验证是否生效

启动服务后,访问 http://localhost:5000/hello 应该就能看到熟悉的 Hello, World! 了。要是还不确定,用这个命令看看端口映射状态:

docker-compose ps

看输出里 web 服务的 PORTS 列,要是显示 0.0.0.0:5000->5000/tcp,就说明端口映射成功啦。

内容的提问来源于stack exchange,提问作者Aserian

火山引擎 最新活动