【问题标题】:Stop docker compose volume from mounting in container after volume reference removed in file在文件中删除卷引用后,停止 docker compose 卷安装在容器中
【发布时间】:2021-09-27 01:32:43
【问题描述】:

我目前正在使用 docker compose 文件运行自定义构建的 docker 容器。 docker compose 文件如下所示:

version: '2'
services:
  ubuntu:
    privileged: true
    image: custom_docker_image:17
    container_name: custom_docker_container
    command: '/usr/bin/supervisord'
    volumes:
       - /custom_docker_path/public:/public
       - /custom_docker_path/data/logs:/data/logs
       - /custom_docker_path/var/log:/var/log
       - /custom_docker_path/etc/nginx:/etc/nginx
       - /custom_docker_path/etc/supervisor:/etc/supervisor
       - /etc/letsencrypt:/etc/letsencrypt
    ports:
       - '9202:9200'

docker 容器运行服务和进程,这些服务和进程使用主管保持活动状态。 在我更改卷安装之前,一切都按预期运行。

以前用于具有卷的文件如下:

version: '2'
services:
  ubuntu:
    privileged: true
    image: custom_docker_image:17
    container_name: custom_docker_container
    command: '/usr/bin/supervisord'
    volumes:
       - /custom_docker_path/public/db:/public/db
       - /custom_docker_path/public/settings:/public/settings
       - /custom_docker_path/data/logs:/data/logs
       - /custom_docker_path/var/log:/var/log
       - /custom_docker_path/etc/nginx:/etc/nginx
       - /custom_docker_path/etc/supervisor:/etc/supervisor
       - /etc/letsencrypt:/etc/letsencrypt
    ports:
       - '9202:9200'

以前,只有容器中公共目录中的 db 和 settings 文件夹与主机共享。然后我决定与主机共享整个公共目录。

共享成功,除了 dbsettings 文件夹仍与整个公共目录一起共享。

在容器内运行 mount 命令会显示以下内容:

/dev/mapper/host_machine_mount root on /public type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/mapper/host_machine_mount root on /data/logs type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/mapper/host_machine_mount root on /public/db type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/mapper/host_machine_mount root on /public/settings type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/mapper/host_machine_mount root on /etc/supervisor type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/mapper/host_machine_mount root on /etc/letsencrypt type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/mapper/host_machine_mount root on /var/log type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/mapper/host_machine_mount root on /etc/nginx type ext4 (rw,relatime,errors=remount-ro,data=ordered)

根据上述情况,/public 被安装,/public/db/public/settings 也被安装,即使它们没有被引用在新的 docker-compose 文件中。

我提升了容器中的权限,以便在容器启动后手动删除挂载,这很有效 - 但我无法继续进入容器并删除两个挂载点。

我还尝试删除 docker 外部的卷并进行修剪,但两个目录在启动时仍安装在容器内。

试运行:

docker-compose down -v

docker volume rm "volume_name"

docker volume prune

在容器运行、停止以及重启前后尝试了上述命令。

如何阻止这两个目录挂载到容器内?

【问题讨论】:

    标签: linux docker docker-compose mount volumes


    【解决方案1】:

    尝试使用docker-compose down -v 删除 docker-compose.yml 中声明的所有容器和卷

    https://docs.docker.com/compose/reference/down/

    -v, --volumes 删除volumes 中声明的命名卷 Compose 文件和匿名卷的部分 附在容器上。

    【讨论】:

    • 嗨 - 感谢您的反馈。已经尝试过了,该卷已从 docker 卷列表(docker volume ls)中删除,但是当容器再次启动时,卷/挂载会重新创建。
    • 你确定你的 docker-compose 文件中没有卷挂载/custom_docker_path/public/
    • 是的,我 100% 确定。唯一的卷挂载是/custom_docker_path/public:/public。其他挂载 /custom_docker_path/public/db:/public/db/custom_docker_path/public/settings:/public/settings 已删除。
    • 在将挂载从 /public/db 和 /public/settings 更改为 /public 之前,我确实对映像做了很多 docker 提交。这些提交是否会阻止图像删除 /public/db 和 /public/settings 挂载?
    • 您用于创建自定义映像的 Dockerfile 是否具有挂载到 /public/db 和 /public/settings 的 VOLUME?我认为 docker commit 根本不应该影响卷。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多