Docker容器运行Python应用无法访问网页问题求助
问题排查与解决
核心问题分析
你的问题主要来自两个方面:Docker Compose配置的YAML格式错误,以及Dockerfile中文件复制的路径逻辑错误,导致容器内的命令无法正确找到并运行manage.py。
步骤1:修复Docker Compose的YAML缩进
YAML对缩进要求严格,原配置的缩进错误会导致服务无法正确启动。修正后的docker-compose.yml如下:
version: "2.12.2" services: web: tty: true build: dockerfile: Dockerfile context: . command: bash -c "cd happy_traveller && python manage.py runserver 0.0.0.0:8000" ports: - 8000:8000 restart: always
注意:所有子项(web、tty、build、ports等)都需要相对于父项缩进2个空格,build下的dockerfile和context也要再缩进一层。
步骤2:修正Dockerfile的文件复制逻辑
原Dockerfile的复制顺序和路径会导致容器内的文件结构混乱,manage.py的位置与command中的路径不匹配。修正后的Dockerfile如下:
FROM python:3.10 EXPOSE 8000 WORKDIR /app # 先复制依赖文件,利用Docker缓存层优化构建速度 COPY requirements.txt . RUN pip install -r requirements.txt # 复制项目核心代码到容器内的对应目录 COPY happy_traveller ./happy_traveller # 复制其他根目录文件(可选,根据需要调整) COPY . .
这个配置会在容器内创建/app/happy_traveller目录,与你本地的项目结构一致,确保command中的cd happy_traveller能找到正确的路径和manage.py文件。
步骤3:重新构建并运行容器
执行以下命令清理旧容器并重新构建:
# 停止并删除旧容器 docker-compose down # 重新构建镜像并启动容器 docker-compose up --build
额外验证点
- 检查容器是否正常启动:执行
docker-compose logs web查看日志,如果出现Starting development server at http://0.0.0.0:8000/则说明服务正常运行。 - 确认
settings.py中的ALLOWED_HOSTS包含0.0.0.0或*(开发环境下),避免因主机白名单限制导致无法访问:ALLOWED_HOSTS = ['0.0.0.0', 'localhost']
内容的提问来源于stack exchange,提问作者MM01K
相关产品推荐
相关产品推荐

