【问题标题】:How to allow docker sibling container to bind subdirectory from existing volume如何允许 docker 同级容器从现有卷绑定子目录
【发布时间】:2018-04-06 02:20:55
【问题描述】:

我想知道如何允许“子”(兄弟)docker 容器访问已安装卷的某些子目录。作为解释,这是一个简单的设置:

我有以下 Dockerfile,它只是将 Docker 安装在 Docker 容器中:

FROM ubuntu
RUN apt-get update && apt-get install -y curl
RUN curl -fsSL https://get.docker.com/ | sh

我的主机上有以下数据目录

/home/user/data/
                data1.txt
                subdir/
                       data2.txt

构建父镜像:

[host]$> docker build -t parent .

然后运行父容器:

[host]$> docker run --rm --name parent -it -v /home/user/data/:/data/ -v /var/run/docker.sock:/var/run/docker.sock parent

现在我有一个正在运行的容器,并且在新容器“内部”。由于我将 docker 套接字绑定到父级,因此我可以运行 docker 命令来创建“子”容器,它们实际上是同级容器。数据卷已成功映射:

[parent]$> ls /data/
subdir   data1.txt

现在我想创建一个只能看到 subdir 目录的兄弟容器:

[parent]$> docker run --rm --name child -it -v /data/subdir/:/data/ ubuntu

这将创建一个同级容器,我成功地“进入”了容器“内部”,但是新的数据目录是空的。我的假设是因为我告诉它使用“/data/”的卷被主机映射到主机上不存在的目录,而不是使用运行父时定义的卷。

[child]$> ls /data/
<nothing>

我可以做些什么来让这个映射起作用,以便子容器可以在子目录中创建文件,并且父容器可以看到和访问这些文件?不允许孩子查看 data1.txt(或子目录上方的任何其他内容)。

【问题讨论】:

    标签: docker docker-volume


    【解决方案1】:

    “兄弟”容器是正确的术语,您标记的“父”和“子”容器之间没有直接关系,即使您在其中一个容器中运行了docker 命令。

    安装了 docker 套接字的容器仍然控制主机上运行的 dockerd,因此通过 API 发送到 dockerd 的任何路径都将在主机范围内。

    docker 命令使用容器文件系统确实改变了一些事情。这是docker 实用程序本身访问本地文件系统的时候。 docker build docker cp docker import docker exportdocker 与本地文件系统交互的示例。

    坐骑

    -v /home/user/data/subdir:/data 用于第二个容器

    docker run --name parent_volume \
      -it --rm -v /home/user/data:/data ubuntu
    
    docker run --name child_volume \
      -it --rm -v /home/user/data/subdir:/data ubuntu
    

    您运行的进程需要小心写入装载到多个容器中的数据,以免数据被破坏。

    【讨论】:

    • 为了清楚起见,我说您不能对命名卷执行此操作是否正确?例如1. docker volume create --name data 2. docker run --name parent_volume -it --rm -v data:/data ubuntu 3. docker run --name child_volume -it --rm -v data/subdir:/data ubuntu
    • @RightOfZen 正确。命名卷存储在主机上,并由文件系统上的 ID/名称明确分隔。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2020-08-06
    • 2021-11-27
    • 2019-12-21
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    相关资源
    最近更新 更多