我不清楚不清楚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/