Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Updating Environment Variables of a Container using Docker

I've setup a server with multiple docker containers, accessible with jwilders nginx reversre proxy. When you run the containers you can set the VIRTUAL_HOST environment variable. I've been trying to figure out a way of updating these after a container was launched.

A solution posted here :

You just stop docker daemon and change container config in

/var/lib/docker/containers/[container-id]/config.json

Requires you to stop the docker daemon, but I would prefer not to have to resort to that.

Another here, uses docker commit to preserve the instance information:

Having said that, you -can- preserve filesystem changes in the container, by committing it as a new image;

$ docker run -it --name=foobar alpine sh
$ docker commit foobar mynewimage
$ docker rm foobar
$ docker run -it --name=foobar mynewimage sh

Though this also seems to be a bit over the top for just changing an environment variable.

I've looked in docker update, but that is mainly for reconfiguring container resources.

Of course, if I have no other choice I will use either of the methods above, but I'm wondering if anyone has found some other solution?

like image 942
Victor.dMdB Avatar asked Jul 26 '16 10:07

Victor.dMdB


1 Answers

Destroy your container and start a new one up with the new environment variable using docker run -e .... It's identical to changing an environment variable on a running process, you stop it and restart with a new value passed in. Replace the concept of restarting a process with destroying and recreating a new container.

If your container contains files that cannot be lost, then you should be using volumes. The other contents of the container filesystem should be either disposable or immutable.

like image 92
BMitch Avatar answered Oct 05 '22 23:10

BMitch