Docker exec命令没有使用/

时间:2016-01-22 12:00:59

标签: docker

我是Docker容器的新手,我正在努力解决我现在面临的问题。

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

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

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

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

请帮助!!

1 个答案:

答案 0 :(得分:3)

你是在误解下操作的。 docker image 仅包含其中安装的内容。出于效率原因,这通常是非常简化的操作系统版本。

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

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

docker exec附加到其中一个容器以运行命令。所以你只会看到里面的东西......在图像里面,或者添加了post start(比如日志文件)。它没有主机文件系统的愿景,可能不是相同的操作系统 - 唯一的要求是它共享内核的元素......虽然通常有一个选择常用的二进制文件。

当您run创建容器的图像时,您可以指定一个挂载。执行此操作时,其中一个选项是通过主机文件系统,例如, -v /path/on/host:/path_in/container。但您不必这样做,您可以使用数据容器或使用docker volume mount。例如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 

将数据容器附加到/path/to/data挂载上。但是在这两种情况下都没有直接触及“主机”文件系统 - 这就是停泊事物的重点。