我可以将文件从 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
我在 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