W moim pliku Dockerfile:
ENV PROJECTNAME mytestwebsite
CMD ["django-admin", "startproject", "$PROJECTNAME"]
Błąd:
CommandError: '$PROJECTNAME' is not a valid project name
Jakie jest najszybsze obejście tego problemu? Czy Docker planuje „naprawić” lub wprowadzić tę funkcjonalność w nowszych wersjach Dockera?
UWAGA: Jeśli usunę linię CMD z pliku Docker, a następnie uruchomię kontener Docker, będę mógł ręcznie uruchomić Django-admin startproject $ PROJECTNAME z wnętrza kontenera i utworzy projekt ...
docker
dockerfile
david
źródło
źródło
$PROJECTNAME
?Odpowiedzi:
Kiedy używasz listy wykonania, jak w ...
... wtedy Docker wykona dane polecenie bezpośrednio , bez angażowania powłoki. Ponieważ nie ma tu powłoki, oznacza to:
>
,<
,|
, etccommand1; command2
Jeśli chcesz
CMD
rozwijać zmienne, musisz zorganizować powłokę. Możesz to zrobić w ten sposób:Lub możesz użyć prostego ciągu zamiast listy wykonań, co daje wynik w dużej mierze identyczny z poprzednim przykładem:
źródło
Jeśli chcesz użyć wartości w czasie wykonywania, ustaw
ENV
wartość wDockerfile
. Jeśli chcesz go używać podczas kompilacji, powinieneś użyćARG
.Przykład:
Przekaż wartość w poleceniu kompilacji:
docker build -t tagName --build-arg value="jarName"
źródło
Powiedzmy, że chcesz rozpocząć proces Java w kontenerze:
Przykładowy fragment pliku Dockerfile:
Przykładowy fragment entrypoint.sh:
źródło
Zainspirowany powyżej, zrobiłem to:
źródło