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.