使用docker compose run映射端口,无法访问容器内Django服务的问题
解决Docker Compose Run启动Django后无法访问localhost:8000的问题
核心问题说明
docker compose run默认不会启用docker-compose.yml中定义的端口映射,必须显式添加--service-ports参数才能加载端口配置- Django的
runserver命令默认仅绑定容器内部的127.0.0.1,这个地址无法被宿主机访问,需要改为绑定0.0.0.0
正确操作示例
1. 进入容器的正确命令
执行以下命令进入指定项目的容器:
docker compose -p dev run --service-ports --entrypoint /usr/bin/fish shop-backend
--service-ports参数会自动应用docker-compose.yml里的ports映射规则,将宿主机8000端口关联到容器8000端口。
2. 容器内启动Django服务的正确命令
进入容器后,执行启动命令时指定绑定所有网络接口:
python3 src/manage.py runserver 0.0.0.0:8000
此命令让Django监听容器内所有可访问的网络接口,宿主机就能通过localhost:8000正常访问服务。
额外验证点
如果仍无法访问,可检查以下内容:
- 宿主机8000端口是否被占用:Linux/macOS用
lsof -i :8000,Windows用netstat -ano | findstr ":8000"查看 - 容器运行状态:执行
docker compose -p dev ps确认shop-backend容器处于运行状态 - 防火墙拦截:临时关闭宿主机防火墙测试是否能访问
内容的提问来源于stack exchange,提问作者zdeneklapes
相关产品推荐
相关产品推荐

