【问题标题】:can I mount a file from volume in docker to the container?我可以将文件从 docker 中的卷挂载到容器吗?
【发布时间】:2018-05-18 16:50:45
【问题描述】:

我将一个像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"
    }
]

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

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-volume


【解决方案1】:

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

  • 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 目录而不是从 docker 命名卷挂载 id_rsa。 换句话说,以下三个命令是等价的

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

【讨论】:

  • 解决方案 4 应该可以,但看起来很难看 ;-),希望我们可以在这个 --mount source=<file>|<path>987654328@ 的挂载标签中支持额外的文件参数
  • docker 还没有提供。我也希望在以下版本中可以实现。
  • 从命名卷挂载文件(第 4 个要点)当然是不应该做的事情。
猜你喜欢
  • 1970-01-01
  • 2018-10-29
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
相关资源
最近更新 更多