【问题标题】:How to mount a directory inside a docker container on Linux host [duplicate]如何在 Linux 主机上的 docker 容器内挂载目录 [重复]
【发布时间】:2017-02-23 22:17:12
【问题描述】:

我想将一个目录从 docker 容器挂载到本地文件系统。该目录是网站根目录,我需要能够使用任何编辑器在我的本地计算机上对其进行编辑。

我知道我可以运行docker run -v local_path:container_path,但这样做只会在容器内创建一个空目录。

如何在 linux 主机上的 docker 容器中挂载目录?

【问题讨论】:

  • 谢谢,您如何建议使用volumes 为开发人员提供一个随时可用的灯组环境,以便他们可以在自己的计算机上使用自己喜欢的编辑器和工具?
  • 考虑反过来做。将源目录挂载到容器中。使用您的编辑器,构建,从容器内的挂载目录执行。其他方法是将目录挂载到主机上,然后将源代码从容器复制到挂载的目录,以便您的编辑器可以从主机访问它。
  • 我不理解那些致力于将负面观点传播到问题和答案的人。这个问题不仅完全有效,而且是 docker 中缺少的功能。您应该能够在主机中安装命名卷。它已经在文件系统中,但如果你在那里写,更改将不会反映在容器中

标签: linux ubuntu docker docker-volume


【解决方案1】:

如果您的目标是提供准备就绪的 LAMP,则应使用 Dockerfile 中的 VOLUMES 声明。 VOLUME volume_path_in_container 问题是 docker 不会挂载文件,因为它们已经存在于您创建卷的路径中。您可以按照@Grif-fin 在他的评论中所说的那样进行,或者修改容器的入口点,以便他在运行时复制您想要公开给卷的文件。

您必须在 Dockerfile 中使用 build COPYADD 命令插入数据,这样基础文件才会出现在容器中。

然后创建一个入口点,将文件从COPY 路径复制到卷路径。

然后使用 -v 标签和 -v local_path:volume_path_in_container 运行容器。像这样,您应该将容器内的文件安装在本地。 (至少,这是我添加的)。

在此处查找示例:https://github.com/titouanfreville/Docker/tree/master/ready_to_go_lamp

它将避免每次都必须构建,并且您可以从确定的图像中提供它。

为了更好,最好添加一个用户支持,以便您是已挂载文件的所有者(如果您不是 root)。

希望对你有用。

【讨论】:

    【解决方案2】:

    这有点奇怪,但您可以为此使用命名卷。尽管主机安装了卷,但命名的卷不会被清空。您可以访问该目录。看例子:

    docker volume create --name data
    docker run -rm=true -v data:/etc ubuntu:trusty
    docker volume inspect data
    
    [
        {
            "Name": "data",
            "Driver": "local",
            "Mountpoint": "/var/lib/docker/volumes/data/_data",
            "Labels": {},
            "Scope": "local"
        }
    ]
    

    看到挂载点了吗?

    mkdir ~/data
    sudo -s
    cp -r /var/lib/docker/volumes/data/_data/* ~/data
    echo "Hello World">~/data/hello.txt
    
    docker run --rm=true -v ~/data:/etc ubuntu:trusty cat /etc/fstab  #The content is preserved
    docker run --rm=true -v ~/data:/etc ubuntu:trusty cat /etc/hello.txt  #And your changes too
    

    这并不完全是您所要求的,但取决于您的需要它是否有效

    问候

    【讨论】:

      猜你喜欢
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 2016-06-23
      相关资源
      最近更新 更多