2016-04-20 85 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