我不清楚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标志,但我想知道事情是如何工作的)
答案 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