我正在努力从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调用了一个执行Shellt脚本的部署脚本,该脚本执行collectstatic
和migrate
命令(都与--noinput
参数一起使用,这两个都失败了。可以在本地运行shell脚本而没有任何问题;这似乎只是对shell脚本的Docker容器RUN
调用中的问题。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命令没有问题,但是我试图在CMD
调用中获取特定于应用程序的命令,因为我的部署环境需要从Elastic Beanstalk获得数据库环境变量。 最佳答案
看起来我的问题是shell脚本中的行尾。我认为sh正在将--noinput\R
输入到python中,因此它在终端中的外观类似于--noinput
,但实际上它也得到了与之匹配的CR
字符。
当我在本地进行测试时,它在Docker Quickstart终端(它起作用的地方)中,并且Docker容器始终在Ubuntu中运行(失败了)。
过去,我曾用过这种方式,在Windows上编写的Shell脚本中的不同行尾在Linux环境中会搞砸,我需要记住在编辑器中正确设置行尾的重要性。 。