docker-compose up在配置未更改时重新创建容器

时间:2017-03-06 18:44:41

标签: docker docker-compose

我不清楚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如何处理这些东西? 它必须说“最新”,如果配置相同,尽管配置的路径(我知道--no-recreate标志,但我想知道事情是如何工作的)

1 个答案:

答案 0 :(得分:2)

如果一个文件夹是/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