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调用了执行collectstaticmigrate命令的部署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\Rjoin到python中,所以它在terminal上显示为--noinput ,但实际上它正在获得一个CR字符以及它正在匹配。

当我在本地进行testing时,它在Docker Quickstartterminal(它工作的地方),Docker容器总是在Ubuntu中运行(它在失败的地方)。

过去我曾经用过这样的方式,在Windows环境下编写的shell脚本中,不同的行结尾是在Linux环境下搞砸的,我需要记住在编辑器中正确设置行结尾的重要性。 。