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

最佳答案

如果一个文件夹是/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 - docker-compose up在配置不变的情况下重新创建容器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42633213/

10-10 18:19
查看更多