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 unrecognised service when i run this command sudo service docker stop
  • Project Atomic - Cockpit doesnt install through Vagrant
  • Deploy Heroku Process Types to individual apps
  • Using Jenkins Blue Ocean to Deploy builds
  • Logging solution for multiple containers running on same host
  • Suppressing interactive output in Gradle exec tasks
  •  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.

  • docker-php-ext-install - why always using dev?
  • Docker issue commands to an app inside container?
  • Authorization Not working with identityserver4 when using docker
  • Docker images contain old maven dependencies
  • How I can run docker containers on the remote host?
  • ecs-cli up command - attaching own instance profile
  • 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.