在 docker 中使用 docker 挂载卷

Mar*_*rer 4 docker

我正在使用以下命令在容器内运行 docker:
docker run --rm -ti --privileged -v /var/run/docker.sock:/var/run/docker.sock docker:1.12 sh

在该容器的外壳中,我看到一个包含一堆文件的目录。让我们说/project一个文件build.gradle。我想启动一个新容器并使用以下命令挂载此目录

docker run -ti --rm -v /project:/project openjdk:8-jdk bash -c "ls /project".

但是看起来项目目录是空的,ls /project不显示任何文件..

现在尝试挂载文件:

docker run -ti --rm -v /project/build.gradle:/project/build.gradle openjdk:8-jdk bash -c "ls /project/"

这次文件夹显示了文件。

任何知道为什么卷安装无法按预期工作的人。这是权限问题吗?

Flo*_*aie 9

不。在“docker”容器中,你只能得到一个 Docker 客户端,而不是全部。一旦你在你的“docker”容器中安装了 Docker 套接字,当你执行 Docker 命令时,它们会直接进入在你的实际 Docker 主机上运行的 Docker“服务器”。因此,该文件夹应该存在于您的 Docker 主机中。

示例如何在 docker 中使用 docker 挂载卷:

host$ pwd
/var/my-project

host$ docker run -v /var/run/docker.sock:/var/run/docker.sock -v $PWD:/app docker -it sh

/ # ls -l /app ### inside first docker
<LIST OF PROJECT FILES>

/ # docker run -v /var/my-project:/inception docker sh ### you need to pass HOST directory NOT currently running (/app) container directory

/ # ls -l /inception ### inside second docker
<LIST OF PROJECT FILES>
Run Code Online (Sandbox Code Playgroud)