2016-07-17 7 views
5

Pracuję nad uruchomieniem hybrydowej aplikacji django-tornado w kontenerze Docker ze skryptu powłoki i otrzymaniem --noinput jako nierozpoznanego argumentu poleceń django:manage.py collectstatic: błąd: nierozpoznane argumenty: --noinput w skrypcie powłoki uruchomionym przez Docker

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 

Dlaczego miałbym być coraz --noinput jako nierozpoznane argumentu? Mój plik Dockerfile wywołuje skrypt powłoki wdrażania, który wykonuje komendy collectstatic i migrate (oba z argumentem --noinput, który jest nieskuteczny dla obu.) Odtwarzałem z usuwaniem zewnętrznych linii, dostosowywaniem białych znaków dookoła polecenia, itd., Bezskutecznie. można uruchomić skrypt lokalnie bez żadnych problemów, wydaje się być tylko problem w Docker pojemnik RUN wywołania skryptu powłoki

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 
.

Jeśli uruchamiam komendy django w pliku Dockerfilmu z RUN python manage.py collectstatic --noinput, to nie ma problemu, ale próbuję uzyskać komendę specyficzną dla aplikacji w wywołaniu CMD, ponieważ potrzebuję mieć warianty środowiska bazy danych z Elastic Beanstalk dla mojego wdrożenia środowisko.

Odpowiedz

5

Wygląda na to, że moim problemem były zakończenia linii w skrypcie powłoki. Myślę, że sh karmił się --noinput\R w pythonie, więc prezentował się w terminalu jako wyglądający jak --noinput, ale tak naprawdę otrzymał znak CR, jak również był dopasowany przeciwko.

Kiedy testowałem lokalnie, znajdowałem się w terminalu Docker Quickstart (tam, gdzie działało), a kontenery Docker zawsze działały w Ubuntu (tam, gdzie zawodziło).

Uderzyłem w ten sposób w przeszłości, zanim różne zakończenia linii w skryptach powłoki, które zostały napisane w systemie Windows pomieszały w środowisku Linux, i muszę pamiętać, jak ważne jest prawidłowe ustawienie zakończenia linii w moi redaktorzy ...

+0

Czy jest jakiś sposób obejścia tego? Nie jestem w stanie tego rozgryźć. – Cognoscis

+0

Upewnij się, że twój edytor nie wstawia znaków 'CR' dla skryptów powłoki. Jeśli twoje oprogramowanie do obsługi wersji jest poprawnie skonfigurowane, upewnij się, że sprawdzanie rzeczy do wejścia/wyjścia ma właściwe zakończenia linii. Dodałem do mojego pliku '.gitattributes'' text = auto' i '* .sh text eol = lf'. To samo w sobie nie naprawia rzeczy, jeśli twój edytor wciąż dodaje 'CRLF' zamiast tylko' LF', co było moim dużym problemem. –

+0

Dziękuję za odpowiedź. Będę o tym pamiętać następnym razem – Cognoscis