Windows11下用Docker+uWSGI部署Django项目遇启动错误求助
问题排查与解决
核心错误:Docker Run命令参数顺序错误
你当前执行的docker run命令中,端口映射参数-p 8080:80被放在了镜像名djangohw之后,Docker会把这个参数当成要在容器内执行的命令,而-p并不是一个可执行文件,因此抛出错误。
修正后的Docker Run命令
docker run -it --rm -p 8080:80 djangohw
注意:Docker的命令选项(如-p、--rm等)必须放在镜像名称之前,镜像名称之后的内容会被当作容器启动时要执行的命令,覆盖Dockerfile中定义的CMD。
额外优化建议
1. 给start.sh添加可执行权限
Windows系统下创建的shell脚本默认没有可执行权限,容器启动时可能无法运行start.sh。在Dockerfile中添加如下命令:
RUN chmod +x start.sh
修改后的完整Dockerfile:
FROM python:3.9 ENV DEPLOY=1 WORKDIR /opt/tmp COPY . . RUN pip install -r requirements.txt RUN chmod +x start.sh EXPOSE 80 CMD ["sh", "start.sh"]
2. 固定uwsgi监听端口
当前start.sh中uwsgi使用--http=0.0.0.0:0,这会让uwsgi随机选择端口,和Dockerfile中EXPOSE 80的配置不一致。建议修改为固定端口80,确保端口映射生效:
uwsgi --module=mysite.wsgi:application \ --env DJANGO_SETTINGS_MODULE=mysite.settings \ --master \ --http=0.0.0.0:80 \ --processes=5 \ --harakiri=20 \ --max-requests=5000 \ --vacuum
内容的提问来源于stack exchange,提问作者zhaozk
相关产品推荐
相关产品推荐

