停止docker是否构成容器卸载卷?
作为我完全理解docker如何处理后台卷的任务的一部分(从我之前的工作开始),我很好奇运行停止docker是否构成容器卸载卷?,docker,docker-compose,Docker,Docker Compose,作为我完全理解docker如何处理后台卷的任务的一部分(从我之前的工作开始),我很好奇运行docker compose stop如何处理卷 我认为有两种可能性: 在运行docker compose stop后卸载卷,然后在运行docker compose start时按字母顺序重新装载卷 在使用docker compose rm或类似命令删除容器之前,卷一直处于装入状态 我很好奇,因为即使重新启动一个停止的容器,也会在我的主机文件夹中创建一个空目录。我的docker compose.yml中有以
docker compose stop
如何处理卷
我认为有两种可能性:
docker compose stop
后卸载卷,然后在运行docker compose start
时按字母顺序重新装载卷docker compose rm
或类似命令删除容器之前,卷一直处于装入状态docker compose.yml中有以下内容:
volumes:
- .:/var/www/app
- my_modules:/var/www/app/node_modules
因此,根据我对上面链接帖子中答案的理解,创建空目录的原因如下:
绑定挂载首先发生(lexography顺序),覆盖/var/www/app
Docker将尝试装载node_模块
,但由于容器中不再存在该目录(已覆盖),因此它将mkdir node_模块
拥有一个目录来装载命名卷
由于绑定装载在发生mkdir
时已经存在,因此我在主机中看到一个新的空node\u modules
文件夹
如果卷正在装入,这是完全有意义的,但是如果2)为真,并且即使在运行了docker compose stop
之后它们仍保持装入状态,为什么我仍然会看到在主机中创建了一个空目录?我从主机中删除节点模块
,在停止
和向上
命令之间,用于复制此行为。Docker从不删除任何内容。句号,您不希望您的数据丢失。@emix谢谢您,但这不是我要问的。我问的是关于停止容器使用docker compose
是否会卸载卷(不是说删除-我知道它不会删除)的实现,如果不是,为什么我会看到我看到的行为。我很确定你不被允许**rmdir**(2)一个正在使用的装载点目录;因此,如果您可以删除目录,卷就不会装入。@DavidMaze我不能执行docker volume rm node_modules
,例如,因为它说有一个容器正在使用。虽然我不知道这是否意味着它必须被安装。我想知道您是否认为,因为在stop
ping容器之后在主机中删除它,当我重新启动时,删除会反映在容器中,并且因为它需要目录来装载命名卷,所以无论是否重新装载,它都会再次运行mkdir
?我知道这是一个很小的细节,但我觉得整个过程很有趣。Docker从不删除任何东西。句号,您不希望您的数据丢失。@emix谢谢您,但这不是我要问的。我问的是关于停止容器使用docker compose
是否会卸载卷(不是说删除-我知道它不会删除)的实现,如果不是,为什么我会看到我看到的行为。我很确定你不被允许**rmdir**(2)一个正在使用的装载点目录;因此,如果您可以删除目录,卷就不会装入。@DavidMaze我不能执行docker volume rm node_modules
,例如,因为它说有一个容器正在使用。虽然我不知道这是否意味着它必须被安装。我想知道您是否认为,因为在stop
ping容器之后在主机中删除它,当我重新启动时,删除会反映在容器中,并且因为它需要目录来装载命名卷,所以无论是否重新装载,它都会再次运行mkdir
?我知道这是一个很小的细节,但整个过程我觉得很有趣。