How can I use a variable inside a Dockerfile CMD?

Inside my Dockerfile:

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

Error:

  • docker with pycharm 5
  • Deleting images from a private docker registry
  • What's the best way to compose multiple Docker images with different bases
  • bundler: command not found: rails with docker-compose on a sample project
  • docker run command output
  • Running Nginx on Docker
  • 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…

  • Is Docker Toolbox or Docker for Mac beneficial over virtualization solutions?
  • How to use pipes(ioredirection) in Dockerfile RUN?
  • Docker-machine : ca.pem not found
  • can't run docker container with simple node app example in bluemix
  • Is there a way to “publish” ports from a container when using “fig run”?
  • Jenkins Github Plugin can't choose my credentials
  • 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 >, <, |, 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
    
    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.