Docker容器无法找到manage.py?DRF项目容器化执行命令报错
解决Docker容器中
manage.py: not found的问题 我一眼就揪出问题所在了!问题出在你的docker-compose.yml里web服务的启动命令上。
先看你写的这段命令:
command: > sh -c " python manage.py makemigrations && python manage.py migrate && manage.py runserver 0.0.0.0:5000"
前面执行数据库迁移的时候,你都规规矩矩用了python manage.py来调用脚本,但最后启动服务器时,直接写成了manage.py runserver——这就是报错的根源!
在容器环境里,直接输入manage.py runserver,系统不知道该用什么解释器来执行这个文件,哪怕文件明明存在,也会抛出"not found"的误导性报错(实际不是找不到文件,是找不到正确的执行方式)。
两种简单的解决办法,任选其一即可:
方法一:修改启动命令(最直接省心)
把最后一行启动服务器的命令,改成和前面迁移命令一样的写法,用python解释器调用:
command: > sh -c " python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:5000"
方法二:给manage.py添加可执行权限(适合不想每次写python的场景)
- 在本地项目的
manage.py文件最顶部,加上一行shebang声明:
#!/usr/bin/env python3
- 在Dockerfile里,复制完项目文件后,添加一行给文件加可执行权限的命令:
COPY . . RUN chmod +x manage.py # 新增这一行
之后你就可以用./manage.py runserver的方式启动服务了(注意要加./),不过还是更推荐方法一,不用修改代码和Dockerfile,一步到位。
补充一句:你进入容器后能看到manage.py,但如果直接输入manage.py runserver也会报同样的错,必须用python manage.py或者加了权限后的./manage.py才行——这就是为什么文件明明存在却报错的核心原因。
内容的提问来源于stack exchange,提问作者Asif333
相关产品推荐
相关产品推荐

