I've an app running on multiple Docker containers defined by docker-compose
. Everything works fine from my user and the docker-compose ps
output looks like:
Name Command State Ports
------------------------------------------------------------
myuser_app_1 /config/bootstrap.sh Exit 137
myuser_data_1 sh Exit 0
myuser_db_1 /run.sh Exit 143
Now I'm trying to run docker-compose up
with supervisord
(see relevant part of supervisord.conf
below) and the issue is that the containers are now named myapp_app_1
, myapp_data_1
and myapp_db_1
, that is they're created from scratch and all customizations on the former containers is lost.
I tried renaming the containers, but it gives an error saying that there's already a container with that name.
Q: Is there some way to force docker-compose
reuse existing containers instead of creating new ones based in their respective images?
supervisord.conf
... [program:myapp] command=/usr/local/bin/docker-compose -f /usr/local/app/docker-compose.yml up redirect_stderr=true stdout_logfile=/var/log/myapp_container.log stopasgroup=true user=myuser
Compose will always reuse containers as long as their config hasn't changed.
If you have any state in a container, you need to put that state into a volume. Containers should be ephemeral, you should be able to destroy them and recreate them at any time without losing anything.
If you need to initialize something I would do it in the Dockerfile, so that it's preserved in the image.