gpt4 book ai didi

docker - 是否可以挂载 docker 镜像,然后将其作为普通目录或挂载设备访问(RO)?

转载 作者:行者123 更新时间:2023-12-04 08:24:56 29 4
gpt4 key购买 nike

我想获取一个 Docker 镜像(假设 ubuntu:latest)并制作如下内容:

> docker-image-mount ubuntu:latest my_little_ubuntu  
> cd my_little_ubuntu
> ls
/usr /var /bin etc.

有可能吗?

最佳答案

我刚刚调查了 docker 存储图像的内部结构。
如果是 aufs存储驱动程序有以下目录布局(我假设 docker 位于 /var/lib/docker )。

  • /var/lib/docker/aufs/diff在这个目录中,docker 存储了每个图像“层”的数据。它只是一个包含文件的目录,docker 将其挂载在容器根目录中。
  • /var/lib/docker/aufs/layers在这个目录中 docker 只存储文本文件。每个文件都包含特定图像的层 ID 列表。

  • 所以 docker 本身会做这样的事情:
    DOCKER_AUFS_PATH="/var/lib/docker/aufs/"
    DOCKER_AUFS_LAYERS="${DOCKER_AUFS_PATH}/layers/"
    DOCKER_AUFS_DIFF="${DOCKER_AUFS_PATH}/diff/"

    error() { echo "$@" 1>&2; }

    if [ -z "${IMAGE}" ];
    then
    error "Image is not specified"
    exit 1
    fi;

    if [ -z "${TARGET}" ];
    then
    error "Target is not specified"
    exit 1
    fi;

    BRANCH="br"
    while read LAYER; do
    BRANCH+=":${DOCKER_AUFS_DIFF}/${LAYER}=ro+wh"
    done < "${DOCKER_AUFS_LAYERS}/${IMAGE}"

    mount -t aufs -o "${BRANCH}" "${IMAGE}" "${TARGET}"

    其中 ${IMAGE} 是 docker 容器的 ID,${TARGET} 是主机文件系统中存在的用于挂载镜像的目录。

    要卸载它,只需调用:
    umount cf39b476aeec4d2bd097945a14a147dc52e16bd88511ed931357a5cd6f6590de
    正如我在上面的评论中提到的,这在很大程度上取决于存储驱动程序(显然取决于 docker 版本),所以我不能给你任何保证你会让这段代码工作。

    关于docker - 是否可以挂载 docker 镜像,然后将其作为普通目录或挂载设备访问(RO)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26575208/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com