简体   繁体   English

如何将文件从docker中的卷挂载到容器?

[英]can I mount a file from volume in docker to the container?

I put one security file like id_rsa in the docker volume larrycai_vol , trying to mount this into the container as a file. 我在larrycai_vollarrycai_vol放入了一个像id_rsa这样的安全文件,试图将其作为文件挂载到容器中。

$ 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"
    }
]

Do we have some command like below (it doesn't work now) 我们是否有如下所示的命令(现在不起作用)

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

I know it works if I mount file from docker host 我知道如果我从docker host挂载文件就可以了

docker run -it -v $PWD/.ssh/id_rsa:/root/.ssh/id_rsa own_ubuntu

Please, let me a couple of considerations furthermore the proposed solution to avoid further misunderstandings. 请让我进一步考虑一些提议的解决方案,以避免进一步的误解。

  • Docker allows mounting volumes (deployed from path dir of your host to docker path, ie, -v $PWD/.ssh:/root/.ssh = it'd replace complete .ssh folder in destination, so, it's not recommended although possible ) Docker允许挂载卷(从主机的路径目录部署到docker路径,即-v $PWD/.ssh:/root/.ssh = 它将替换目标中的完整.ssh文件夹,因此,尽管可能,不建议这样做
  • Docker allows mounting named volumes (deployed from named volume name to docker path, ie, -v larrycai-vol:/root/.ssh = it'd replace complete .ssh folder in destination, so, it's not recommended although possible ) Docker允许挂载命名卷(从命名卷名部署到-v larrycai-vol:/root/.ssh路径,即-v larrycai-vol:/root/.ssh = 它将替换目标中的完整.ssh文件夹,因此,尽管可能,不建议这样做
  • Docker allows mounting files from host to a docker (example: -v $PWD/.ssh/id_rsa:/root/.ssh/id_rsa = your second example ) Docker允许将文件从主机装载到Docker(例如: -v $PWD/.ssh/id_rsa:/root/.ssh/id_rsa = 您的第二个示例
  • Docker allows mounting files from named volume to a docker (example: -v /var/lib/docker/volumes/YOUR_NAMED_VOLUME_NAME/_data/file:/dest_dir/file = what you're trying to do ) Docker允许将文件从命名卷挂载到docker(例如: -v /var/lib/docker/volumes/YOUR_NAMED_VOLUME_NAME/_data/file:/dest_dir/file = 您要执行的操作

Your mistake is that you're telling docker to mount id_rsa from your larrycai-vol directory, not from docker named volume. 您的错误是您告诉Docker从您的larrycai-vol目录而不是从名为docker的docker挂载id_rsa。 In other words, three following commands are equivalent : 换句话说, 以下三个命令是等效的

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

So, if larrycai-vol directory (not named volume, but directory in your host) doesn't exist, command doesn't work as you want. 因此,如果larrycai-vol目录(未命名卷,而是主机中的目录)不存在,则命令将无法正常运行。

Definitively, to do what you're trying you have to create a bind volume to the directory where named volume store data. 明确地,要执行您想做的事情,您必须创建一个bind volume到命名卷存储数据的目录。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM