我正在努力从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脚本的部署脚本,该脚本执行collectstaticmigrate命令(都与--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环境中会搞砸,我需要记住在编辑器中正确设置行尾的重要性。 。

09-10 08:29
查看更多