How can I use a variable inside a Dockerfile CMD?

Inside my Dockerfile:

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

Error:

  • How to expose host machine aliases to Docker container?
  • Cluster of forward proxies
  • How to bind publish port in Dockerfile on AWS Beanstalk
  • Why the pods returns Error or ExitCode:0 even they run successfully?
  • rails, whenever and docker - cron tasks doesn't run
  • WordPress NGINX conf routes back to Landing Page
  • 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…

  • Pig `Failed to create DataStorage` to Hadoop cluster in Docker ENV
  • Monit execute start program twice
  • CF Garden-runC as a container orchestration engine?
  • Understanding user file ownership in docker: how to avoid changing permissions of linked volumes
  • Docker run rabbitmq -e RABBITMQ_SSL_CERT=/path/to/cert/file
  • Why docker container exits immediately
  • 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.