Docker exec 命令不使用 / 的挂载目录

PHI*_*OUS 5 docker

我是 docker 容器的新手,我正在尝试解决我现在面临的问题。

这些是我基于有限知识的理解。

当我们创建 docker 容器时,Docker 会创建一个本地挂载,并将其用作 docker 容器的根文件系统。

现在,如果我使用 docker exec 从主机服务器运行容器中的任何命令,则 docker 不会将挂载的分区用作容器的 / 文件系统。我的意思是,它仍然从主机服务器中提取二进制文件和环境变量。是否有任何选项/替代解决方案让 docker 也使用 docker exec 的原始挂载目录?

如果我使用 docker attach 或 docker run -i -t /bin/bash 访问/启动容器,我将挂载目录作为我的 / 文件系统,这为我提供了一个完全独立于我的主机系统的环境。但这不会发生在 docker exec 命令中。

请帮忙 !!

Sob*_*que 5

你是在错误的观念下运作的。docker映像仅包含其中安装的内容。出于效率原因,这通常是一个非常精简的操作系统版本。

docker容器是从一个镜像启动的——这是一个正在运行的版本,可以改变和存储状态——但可能会被丢弃。

docker run从图像启动容器。您可以run多次使用相同的图像来创建完全不同的容器(它们的内容恰好具有相同的起点)。

docker exec附加到这些容器之一以运行命令。所以你只会看到里面的东西......在图像中,或者添加后启动(如日志文件)。它没有主机文件系统的愿景,并且可能不是同一个操作系统——唯一的要求是它共享内核的元素……尽管它通常有一些常用的二进制文件。

而当你用run一个镜像来创建容器时,你可以指定一个挂载。执行此操作时的选项之一是通过主机文件系统,例如-v /path/on/host:/path_in/container. 但是您不必这样做,您可以改用数据容器或使用 docker 卷挂载。例如docker run -v /mount,使用不属于父主机的 docker 文件系统在容器内创建一个挂载点。这可用于制作具有以下功能的数据容器:docker create -v /path/to/data --name data_for_acontainer some_basic_image

然后装入卷上一个新的数据容器:

docker run -d --volumes-from data_for_acontainer some_app_image 
Run Code Online (Sandbox Code Playgroud)

它将将该数据容器附加到/path/to/data安装上。但在这两种情况下,“主机”文件系统都没有直接接触 - 这是 dockerising 的重点。