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

时间:2018-05-18 06:10:13

标签: docker docker-volume

我在docker volume id_rsa中放了一个像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"
    }
]

我们是否有类似下面的命令(它现在不起作用)

docker run -it -v larrycai-vol/id_rsa:/root/.ssh/id_rsa own_ubuntu

我知道如果我从docker host

挂载文件就行了
docker run -it -v $PWD/.ssh/id_rsa:/root/.ssh/id_rsa own_ubuntu

1 个答案:

答案 0 :(得分:3)

请允许我进一步考虑提出的解决方案以避免进一步的误解。

  • Docker允许安装卷(从主机的路径dir部署到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

因此,如果larrycai-vol目录(未命名的卷,但主机中的目录)不存在,命令将无法正常工作。

明确地说,要做你正在尝试的事情,你必须在名为volume store data的目录中创建一个bind volume

  

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