我可以将文件从 docker 中的卷挂载到容器吗?

Lar*_*Cai 2 docker docker-volume

id_rsa在 docker 卷中放置了一个安全文件larrycai_vol,尝试将其作为文件安装到容器中。

$ docker volume inspect larrycai-vol
[
    {
        "CreatedAt": "2018-05-18T06:02:24Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/larrycai-vol/_data",
        "Name": "larrycai-vol",
        "Options": {},
        "Scope": "local"
    }
]
Run Code Online (Sandbox Code Playgroud)

我们有像下面这样的命令吗(现在不起作用)

docker run -it -v larrycai-vol/id_rsa:/root/.ssh/id_rsa own_ubuntu
Run Code Online (Sandbox Code Playgroud)

我知道如果我从 docker 主机挂载文件它会起作用

docker run -it -v $PWD/.ssh/id_rsa:/root/.ssh/id_rsa own_ubuntu
Run Code Online (Sandbox Code Playgroud)

mul*_*g0r 6

请让我考虑一下建议的解决方案,以避免进一步的误解。

  • Docker 允许安装卷(从主机的路径目录部署到 docker 路径,即,-v $PWD/.ssh:/root/.ssh=它会替换目标中的完整 .ssh 文件夹,因此,尽管可能,但不推荐
  • Docker 允许安装命名卷(从命名卷名称部署到 docker 路径,即,-v larrycai-vol:/root/.ssh=它会替换目标中的完整 .ssh 文件夹,因此,尽管可能,但不推荐
  • Docker 允许将文件从主机挂载到 docker(示例:-v $PWD/.ssh/id_rsa:/root/.ssh/id_rsa=你的第二个示例
  • Docker 允许将文件从命名卷挂载到 docker(示例:-v /var/lib/docker/volumes/YOUR_NAMED_VOLUME_NAME/_data/file:/dest_dir/file=你想要做什么

您的错误是您告诉 docker 从 larrycai-vol 目录挂载 id_rsa,而不是从 docker 命名卷挂载。换句话说,以下三个命令是等效的

docker run -it -v ./larrycai-vol/id_rsa:/root/.ssh/id_rsa own_ubuntu
docker run -it -v $PWD/larrycai-vol/id_rsa:/root/.ssh/id_rsa own_ubuntu
docker run -it -v larrycai-vol/id_rsa:/root/.ssh/id_rsa own_ubuntu
Run Code Online (Sandbox Code Playgroud)

因此,如果 larrycai-vol 目录(不是命名卷,而是主机中的目录)不存在,命令将无法按您想要的方式工作。

最终,要做您正在尝试的事情,您必须创建一个bind volume名为卷存储数据的目录。

docker run -it -v /var/lib/docker/volumes/larrycai-vol/_data/id_rsa:/root/.ssh/id_rsa own_ubuntu