使用Docker部署Flask应用时静态资源加载失败该如何排查?
问题根因
你的静态资源加载失败是路径配置不匹配导致的:
- Dockerfile中手动设置的
STATIC_PATH /var/www/app/static和实际代码存放路径不一致:你在start.sh中通过-v $PWD:/app将本地项目挂载到了容器的/app目录,静态资源实际存放在/app/static路径下,nginx无法从你配置的错误路径读取资源。 - Dockerfile仅复制了
requirements.txt,没有将app.py、static、templates等项目文件同步到镜像的对应路径,就算不使用挂载也会找不到资源。
修复方案
你使用的tiangolo/uwsgi-nginx-flask镜像默认会自动识别/app目录下的静态资源,无需手动配置STATIC_URL和STATIC_PATH,按以下步骤调整即可:
- 修改Dockerfile,删除冗余的静态路径配置,补充项目文件复制指令,修改后内容如下:
FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7 RUN apk --update add bash nano COPY ./requirements.txt /var/www/requirements.txt RUN pip install -r /var/www/requirements.txt # 复制全部项目文件到镜像默认的应用目录 COPY . /app
- 停止并删除之前运行的异常容器:
docker stop docker.test && docker rm docker.test
- 重新执行
start.sh构建镜像并启动容器即可。
如果需要保留本地挂载调试,你当前start.sh中的挂载参数-v $PWD:/app已经和调整后的路径匹配,无需额外修改。
内容的提问来源于stack exchange,提问作者Jaguar
相关产品推荐
相关产品推荐

