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

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

我在 docker 卷 larrycai_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"
    }
]

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

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

我知道如果我从 docker 主机

挂载文件它会起作用
docker run -it -v $PWD/.ssh/id_rsa:/root/.ssh/id_rsa own_ubuntu

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

  • 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

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

明确地,要执行您正在尝试的操作,您必须创建一个 bind volume 到命名卷存储数据的目录。

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