在 docker 中安装卷

在 docker 中安装卷

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

在该容器的 shell 中,我看到一个包含一堆文件的目录。假设/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/"

这次文件夹显示了该文件。

有谁知道为什么卷挂载无法按预期工作。这是权限问题吗?

答案1

不是。在“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>

答案2

我在容器内进行开发。要从 docker 启动带有 docker 的应用程序并挂载卷,您只需使用主机中的路径挂载该卷即可。

docker-compose.yaml

version: '3.8'

services:
  web:
    build:
      context: ./baseimage
      dockerfile: Dockerfile
    ports:
      - '8000:8000'
    volumes:
      # - ./<appsrc>:/app  # <= This doesn't work
      # Instead use the location of the volume on the host system
      # (where the docker socket is mounted from)
      - /c/Users/<user>/<container_folder>/<appsrc>:/app # <= this does work 

现在你可以运行docker-compose up

当然,只有当<container_folder>您在运行此命令的 docker 容器内安装时,这才有效。

相关内容