How can I use a variable inside a Dockerfile CMD?
Inside my Dockerfile:
ENV PROJECTNAME mytestwebsite CMD ["django-admin", "startproject", "$PROJECTNAME"]
CommandError: '$PROJECTNAME' is not a valid project name
What is the quickest workaround here? Does Docker have any plan to “fix” or introduce this functionality in later versions of Docker?
NOTE: If I remove the CMD line from the Docker file and then run the Docker container, I am able to manually run Django-admin startproject $PROJECTNAME from inside the container and it will create the project…
One Solution collect form web for “How can I use a variable inside a Dockerfile CMD?”
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
- No multiple commands via
- 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