dockerdockerfiledocker-cmd

How can I use a variable inside a Dockerfile CMD?


Inside my Dockerfile:

ENV PROJECTNAME mytestwebsite
CMD ["django-admin", "startproject", "$PROJECTNAME"]

Error:

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...  


Solution

  • 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:

    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