When you use an execution list, as in...
CMD ["django-admin", "startproject", "$PROJECTNAME"]
...then Docker will execute the given command directly, without involving a shell. Since there is no shell involved, that means:
- No variable expansion
- No wildcard expansion
- No i/o redirection with
>
, <
, |
, etc
- No multiple commands via
command1; command2
- And so forth.
If you want your CMD
to expand variables, you need to arrange for a shell. You can do that like this:
CMD ["sh", "-c", "django-admin startproject $PROJECTNAME"]
Or you can use a simple string instead of an execution list, which gets you a result largely identical to the previous example:
CMD django-admin startproject $PROJECTNAME
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…