gpt4 book ai didi

linux - 单个文件卷挂载为 Docker 中的目录

转载 作者:IT老高 更新时间:2023-10-28 12:36:19 26 4
gpt4 key购买 nike

Docker documentation表示可以将单个文件挂载到 Docker 容器中:

The -v flag can also be used to mount a single file - instead of just directories - from the host machine.

$ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

This will drop you into a bash shell in a new container, you will have your bash history from the host and when you exit the container, the host will have the history of the commands typed while in the container.

当我尝试这样做时,文件会挂载为目录:

tom@u ~/project $ docker run --rm -it -v file.json:/file.json test
total 80K
drwxr-xr-x 9 root root 4.0K Dec 7 12:58 .
drwxr-xr-x 63 root root 4.0K Dec 7 12:58 ..
drwxr-xr-x 2 root root 4.0K Dec 4 16:10 file.json

我的 Dockerfile 看起来像这样:

FROM ubuntu:14.04
MAINTAINER Tom
CMD ["ls", "-lah", "/test"]

Docker 版本为 1.9.1,构建 a34a1d5。

这是一个文档问题,是我的误解,还是发生了其他事情?

最佳答案

也许上面的答案很清楚......但我花了一些时间才弄清楚我的情况。

导致与 -v 共享的文件显示为目录而不是文件的根本原因是 Docker 在主机上找不到该文件。因此 Docker 在容器中创建了一个新目录,其名称是主机上不存在的文件的名称,因为 docker 认为用户只想共享将来创建的卷/目录。

所以在上面报告的问题中,如果你在 -v 命令中使用了相对目录,而 docker 不理解相对目录,这意味着在主机上没有找到该文件,因此 docker 创建了一个目录。当问题是由于相对目录引起时,上面建议使用 $(pwd) 的答案将是正确的解决方案。

但是对于那些没有使用相对目录并且遇到相同问题的阅读此页面的人......然后尝试了解主机上缺少文件的原因。

这可能只是一个愚蠢的错字...

可能是您正在从客户端运行“docker run”命令,该命令在不同的主机上生成 docker 容器,并且正在共享的文件在该不同的主机上不存在。与 -v 共享的文件必须存在于 docker 代理将生成容器的主机上......不一定在执行“docker run -v ...”命令的客户端上(尽管它们在很多情况下)。

对于 Mac 和 Windows,上面还有其他可能的解释......也可能是这样。

所以主机中缺少的文件是问题...解决设置中的问题...使用 $(pwd) 可能是解决方案,但并非总是如此。

关于linux - 单个文件卷挂载为 Docker 中的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34134343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com