停止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如何处理后台卷的任务的一部分(从我之前的工作开始),我很好奇运行
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
    ?我知道这是一个很小的细节,但整个过程我觉得很有趣。