Passing variable from container start to file

I have the following lines in a Dockerfile where I want to set a value in a config file to a default value before the application starts up at the end and provide optionally setting it using the -e option when starting the container.

I am trying to do this using Docker’s ENV commando

  • docker flannel subnet issues
  • Django channels and docker-compose error
  • `docker run ubuntu:14.04 /bin/echo` produces SELinux error on Fedora 20
  • git runner is unable to access
  • Error using mount command within Dockerfile
  • Can not deploy custom MFP docker image on IBM Bluemix
  •  ENV CONFIG_VALUE default_value
     CMD command_to_start_app

    I have the string CONFIG_VALUE explicitly in the file CONFIG_FILE and the default value from the Dockerfile gets correctly substituted. However, when I run the container with the added -e CONFIG_VALUE=100 the substitution is not carried out, the default value set in the Dockerfile is kept.

    When I do

    docker exec -i -t container_name bash

    and echo $CONFIG_VALUE inside the container the environment variable does contain the desired value 100.

  • Cannot run webpack-dev-server inside docker
  • Cannot install docker pkg dependency in Go
  • Docker Containers with different Network Interface
  • When insert rows using python psycopg2, docker postgres process is terminated
  • How to log docker build installation package errors
  • terraform provider + docker registry v2 = 404
  • 2 Solutions collect form web for “Passing variable from container start to file”

    That shouldn’t be possible in a Dockerfile: those instructions are static, for making an image.

    If you need runtime instruction when launching a container, you should code them in a script called by the CMD directive.
    In other words, the sed would take place in a script that the CMD called. When doing the docker run, that script would have access to the environment variable set just before said docker run.

    Instructions in the Dockerfile are evaluated line-by-line when you execute docker build and are not re-evaluated at run-time.

    You can still do this however by using an entrypoint script, which will be evaluated at run-time after any environment variables have been set.

    For example, you can define the following script:

    exec "$@"

    The exec "$@" will execute any CMD or command that is set.

    Add it to the Dockerfile e.g:

    COPY /
    RUN chmod +x /
    ENTRYPOINT ["/"]

    Note that if you have an existing entrypoint, you will need to merge it with this one – you can only have one entrypoint.

    Now you should find that the environment variable is respected i.e:

    docker run -e CONFIG_VALUE=100 container_name cat CONFIG_FILE

    Should work as expected.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.