Docker-Compose启动Flask容器失败,手动运行Docker容器却成功
问题:Docker-Compose启动Flask容器失败,手动启动正常?
我正在学习Flask及Docker化部署一个测试Flask博客项目,为了实现uWSGI无需重启容器即可重载,配置了Docker卷。使用docker-compose up启动nginx和Flask两个容器时,nginx启动成功,但Flask容器报错:
realpath() of flaskblog/uwsgi.ini failed: No such file or directory [core/utils.c line 3662]
并退出。但手动运行该容器时,能确认flaskblog/uwsgi.ini文件存在,且手动执行uwsgi命令可正常启动服务。
项目结构
[wintermute]$ tree -L 2 --gitignore . ├── app.py ├── docker-compose.yml ├── flaskblog │ ├── config.py │ ├── dev │ ├── Dockerfile │ ├── errors │ ├── __init__.py │ ├── instance │ ├── logging_test.py │ ├── main │ ├── models.py │ ├── posts │ ├── static │ ├── templates │ ├── users │ └── uwsgi.ini ├── instance │ ├── site.db ├── nginx │ ├── Dockerfile │ └── nginx.conf └── requirements.txt
flaskblog/Dockerfile内容
FROM python:3.11 ENV LANG=C.UTF-8 WORKDIR /app COPY app.py requirements.txt /app RUN pip install --no-cache-dir -r /app/requirements.txt RUN pip install itsdangerous==2.0.1 WORKDIR /app/flaskblog COPY flaskblog/ /app/flaskblog/ WORKDIR /app/instance COPY instance/site.db /app/instance WORKDIR /app EXPOSE 8003 CMD [ "uwsgi", "flaskblog/uwsgi.ini" ]
docker-compose.yml内容
version: '3.7' services: flask: build: context: . dockerfile: ./flaskblog/Dockerfile container_name: flask restart: "no" environment: - APP_NAME=MyFlaskApp expose: [ 8003 ] cap_add: - SYS_PTRACE volumes: - ./flaskblog:/app nginx: build: ./nginx container_name: nginx restart: "no" ports: - "8083:8083" cap_add: - SYS_PTRACE
问题原因及解决方法
问题出在Docker卷挂载路径错误:
- 在docker-compose.yml中,你把本地的
./flaskblog目录挂载到了容器的/app目录下。 - 根据Dockerfile的构建逻辑,容器内的
/app目录原本包含app.py、requirements.txt,以及子目录flaskblog和instance。 - 挂载后,容器内的
/app被本地的flaskblog目录完全覆盖,导致原本的/app/flaskblog路径变成了/app/flaskblog/flaskblog,uWSGI找不到指定的flaskblog/uwsgi.ini文件。
解决步骤
- 修改docker-compose.yml中的卷挂载配置,将本地的
./flaskblog挂载到容器内的/app/flaskblog,而非/app:
volumes: - ./flaskblog:/app/flaskblog
这样既可以实现代码热重载需求,又不会破坏容器内的/app根目录结构。
- 重新构建并启动容器:
docker-compose down docker-compose up --build
验证:启动后,容器内的/app/flaskblog/uwsgi.ini路径会正确映射本地文件,uWSGI可以正常读取配置文件启动服务。
内容的提问来源于stack exchange,提问作者groknaut
相关产品推荐
相关产品推荐

