一千萬個為什麽

搜索

docker-compose up在配置不變時重新創建容器


我不清楚Docker-compose是如何實現何時重新創建容器或不在何處的。 我的情況是:

docker-compose -f conf.yml up//Ok
docker-compose -f conf.yml up//xxx is up-to-date

然後我做:

docker-compose -f /copy/conf.yml up//Recreating container

但是copy/conf.yml與conf.yml相同 為什麽docker-compose重新創建容器,而它的配置沒有改變?它只從其他路徑加載。 docker-compose如何處理這些東西? 它必須說“最新”,如果配置是相同的,盡管配置的路徑(我知道 - 沒有重新創建標誌,但我想知道事情是如何工作的)

最佳答案

如果一個文件夾是/app/conf.yml,另一個文件夾是/app_copy/conf.yml,那麽你會發現docker創建了兩個不同的“項目”,一個用於“app”,另一個用於“appcopy”(它刪除非字母數字字符並使其全部小寫)。該項目默認情況下是每個容器名稱的第一部分,它被命名為 $ project_ $ service_ $ instance

如果您在docker-compose.yml中指定了容器名稱,那麽如果您將卷裝載到當前文件夾時會有所不同,那麽docker-compose會重新創建它。否則,如果撰寫文件完全相同,源圖像沒有改變,並且沒有外部特征會有所不同,那麽我就不能重現這一個。

這是一個沒有固定的container_name的例子:

$ docker-compose -f docker-compose.test.yml up -d
Creating test_testapp_1

$ docker-compose -f test/docker-compose.test.yml up -d
test_testapp_1 is up-to-date

以下是如果您嘗試在撰寫文件中指定容器名稱時會發生的情況:

$ pwd
..../test

$ docker-compose -f docker-compose.name.yml up -d
Starting unique_name

$ docker-compose -f subdir/docker-compose.name.yml up -d
Creating network "subdir_default" with the default driver
Creating unique_name

ERROR: for test  Cannot create container for service test: Conflict. The container name "/unique_name" is already in use by container 80b44bc94912b755cf2430b132fa6112f960e2752f69a357c27375bbc905ff76. You have to remove (or rename) that container to be able to reuse that name.

$ mv subdir test

$ docker-compose -f test/docker-compose.name.yml up -d
unique_name is up-to-date

轉載註明原文: docker-compose up在配置不變時重新創建容器

猜你喜歡