Reuse containers with `docker-compose`

非 Y 不嫁゛ 提交于 2019-12-01 16:10:40

问题


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

回答1:


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.



来源:https://stackoverflow.com/questions/36756168/reuse-containers-with-docker-compose

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!