2016-04-20 211 views
2

我有一个应用程序在docker-compose定义的多个Docker容器上运行。一切都从我的用户正常工作和​​输出的样子:用`docker-compose`重复使用容器

 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 

现在我试图运行docker-compose upsupervisord(请参见下面的supervisord.conf相关部分),并且问题是,容器现在命名为myapp_app_1myapp_data_1myapp_db_1,即它们是从头开始创建的,前一个容器的所有定制都会丢失。

我尝试重命名容器,但它给出了一个错误,说已经有一个名称的容器。

问:有什么方法可以强制docker-compose重用现有的容器,而不是根据各自的图像创建新的容器吗?

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 
+0

如果您只需要每个应用程序一个容器,那么您可以在docker-compose.yml文件中使用'container_name:app' –

+1

'docker-compose'默认使用yml文件的文件夹名称作为项目名称,将该名称添加到所有容器名称。您可以使用'docker-compose -p custom_name'指定项目名称。我不确定这是否会强制重用现有的具有相同名称的容器。如果您有不想覆盖的重要数据,请首先在不重要的容器上首先进行测试。 –

回答

2

撰写will always reuse containers as long as their config hasn't changed

如果您在容器中有任何状态,则需要将该状态放入一个卷中。容器应该是短暂的,你应该能够随时销毁它们并在不丢失任何东西的情况下重新创建它们。

如果您需要初始化某些东西,我会在Dockerfile中执行此操作,以便将其保存在图像中。

+0

我终于设法通过指定'docker-compose.yml'中的'volumes_from'来重用数据量。感谢提示。 – fernandezcuesta