manage.py collectstatic:error:无法识别的参数: – 由Docker启动的shell脚本中的–noinput
我正在从shell脚本启动Docker容器中的django-tornado混合应用程序,并将--noinput
作为django命令的无法识别的参数:
usage: manage.py collectstatic [-h] [--version] [-v {0,1,2,3}] [--settings SETTINGS] [--pythonpath PYTHONPATH] [--traceback] [--no-color] [--noinput] [--no-post-process] [-i PATTERN] [-n] [-c] [-l] [--no-default-ignore] manage.py collectstatic: error: unrecognized arguments: --noinput
为什么我--noinput
当成一个无法识别的参数? 我的Dockerfile调用了执行collectstatic
和migrate
命令的部署shell脚本(都带有--noinput
参数,这两个命令都失败了)。我已经玩过了删除多余的行,调整命令周围的空白等等,但无济于事。我可以在本地运行shell脚本,没有任何问题;它似乎只是Docker容器RUN
调用shell脚本的一个问题。
Dockerfile:
FROM python:2.7 RUN apt-get update RUN apt-get install -y build-essential RUN apt-get install -y python-dev RUN apt-get install -y libmysqlclient-dev RUN mkdir /code ADD . /code/ WORKDIR /code RUN pip install -r requirements.txt CMD ["sh","./deploy.sh"] EXPOSE 8888
deploy.sh:
#!/bin/sh python manage.py collectstatic --noinput python manage.py migrate --noinput python main.py
如果我运行在RUN python manage.py collectstatic --noinput
的Dockerfile django命令RUN python manage.py collectstatic --noinput
没有问题,但我想获得特定于应用程序的命令在CMD
调用,因为我需要从数据库环境variablesElastic Beanstalk用于我的部署环境。
看起来我的问题是shell脚本中的行尾。 我认为sh正在将--noinput\R
join到python中,所以它在terminal上显示为--noinput
,但实际上它正在获得一个CR
字符以及它正在匹配。
当我在本地进行testing时,它在Docker Quickstartterminal(它工作的地方),Docker容器总是在Ubuntu中运行(它在失败的地方)。
过去我曾经用过这样的方式,在Windows环境下编写的shell脚本中,不同的行结尾是在Linux环境下搞砸的,我需要记住在编辑器中正确设置行结尾的重要性。 。
- 错误:tornado.general:WebSocket … Swampdragon:DoesNotExist:匹配查询不存在
- docker Django runserver阻止连接到MySQL DB的二进制文件
- 使用docker-compose链接django和mysql容器
- Django与Heroku上的Postgresql – 无法将主机名“db”翻译为地址:名称或服务未知
- 尝试使用Django的Docker,但服务器没有启动
- Django + docker +周期性命令
- 在docker-compose中运行Django应用程序:连接到postgres数据库拒绝了第一次,但后来工作
- Jenkins继续以root身份运行slave操作
- Docker容器中的Django + uWSGI / nginx – ImportError:没有名为.wsgi的模块