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?
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.