我正在尝试从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调用了一个部署shell脚本,该脚本执行collectstatic
和migrate
命令(两者都带有--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命令没有问题,但我试图在CMD
调用中获取特定于应用程序的命令,因为我需要为我的部署环境提供Elastic Beanstalk的数据库环境变量。
答案 0 :(得分:7)
看起来我的问题是shell脚本中的行结尾。我认为sh正在--noinput\R
中进入python,所以它在终端中显示为--noinput
,但实际上它正在获得一个CR
字符,它与
当我在本地测试时,它位于Docker Quickstart终端(它工作的地方),并且Docker容器总是在Ubuntu中运行(它失败了)。
在过去之前,我已经采用过这种方式,在Windows上编写的shell脚本中的不同行结尾在Linux环境中搞砸了,我需要记住在我的行中正确设置行结尾的重要性。编辑...