manage.py collectstatic:错误:无法识别的参数: - Docker启动的shell脚本中的noinput

时间:2016-07-17 17:42:07

标签: python django docker

我正在尝试从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脚本,该脚本执行collectstaticmigrate命令(两者都带有--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的数据库环境变量。

1 个答案:

答案 0 :(得分:7)

看起来我的问题是shell脚本中的行结尾。我认为sh正在--noinput\R中进入python,所以它在终端中显示为--noinput,但实际上它正在获得一个CR字符,它与

当我在本地测试时,它位于Docker Quickstart终端(它工作的地方),并且Docker容器总是在Ubuntu中运行(它失败了)。

在过去之前,我已经采用过这种方式,在Windows上编写的shell脚本中的不同行结尾在Linux环境中搞砸了,我需要记住在我的行中正确设置行结尾的重要性。编辑...