如何将docker容器中的目录挂载到主机?

时间:2015-01-22 08:10:02

标签: wordpress docker boot2docker

在docker容器中安装主机目录非常容易。

但我需要反过来。

我使用docker容器作为开发WordPress插件的开发环境。这个docker容器包含运行WordPress(MySQL,Apache,PHP和WordPress)所需的一切。我将插件src文件夹从docker容器中的主机挂载,这样我就可以在开发过程中测试我的插件。

对于调试,如果我在主机上运行的IDE对docker容器中的WordPress文件具有读访问权,那将会很有帮助。

我找到了解决这个问题的两种方法,但两者看起来都非常糟糕。

  1. 使用WordPress文件的路径

    将数据卷添加到docker容器

    docker run ... -v / usr / share / wordpress / ...

    Docker将此目录添加到主机/ var / lib / docker / vfs / dir上的路径...但是您需要使用docker inspect查找实际路径,并且需要root访问权限才能查看文件。 / p>

  2. 将主机目录挂载到docker容器,并将容器中的WordPress文件复制到该挂载的主机目录。符号链接似乎不起作用。

  3. 有没有更好的方法呢?没有复制文件或更改访问权限?

    谢谢!

5 个答案:

答案 0 :(得分:0)

您可以使用带有svendowideits samba container的smb共享文件,如下所示:

docker run --rm -v $(which docker):/docker -v /var/run/docker.sock:/docker.sock svendowideit/samba <container name>

答案 1 :(得分:0)

将WordPress文件复制到已安装的文件夹是解决方案。

我将容器中的文件从原始文件夹移动到已安装的文件夹,并使用符号链接将它们链接回原始文件夹。

重要的是,容器可以跟随容器中的符号链接,但主机不能。因此,仅使用从原始文件夹到已装入文件夹的符号链接不起作用,因为主机无法跟随容器中的符号链接!

答案 2 :(得分:0)

如果您使用 volume 而不是文件系统路径,则可以执行此操作。如果它已经不存在,它会自动为您创建。

docker run -d -v usr_share_wordpress:/usr/share/wordpress --name your_container ... image

停止或删除容器后,您的卷将存储在包含容器文件的文件系统中。

您可以使用busybox image检查 your_container 生命周期内的卷内容。类似的东西:

docker run -it --rm --volumes-from your_container busybox sh

关闭your_container后,您仍然可以通过以下方式检查音量:

docker run -it --rm -v usr_share_wordpress:/usr/share/wordpress busybox sh

列出docker volume ls的卷。

答案 3 :(得分:0)

我也有类似的需要将文件从容器暴露给主机。截止到今天,open issue与此相关。提到的使用binds的变通方法之一非常简洁。它在容器启动并运行时起作用:

container_root=$(docker inspect --format {{.State.Pid}} "$container_name")/root
sudo bindfs --map=root/"$USER" "$container_root/$app_folder" "$host_folder"

PS:我不确定这是否适合生产,但它应该在开发方案中起作用!

答案 4 :(得分:-1)

为什么不这样做:docker run ... -v /usr/share/wordpress/:/usr/share/wordpress。现在你的本地/ usr / share / wordpress /映射到Docker容器中的/ usr / share / wordpress,两者都有相同的文件。您也可以通过这种方式安装在容器中的其他位置。语法是host_path:container_path,所以如果你想将主机上的/ usr / share / wordpress挂载到容器上的/ my / new / path,你只需执行:docker run ... -v /usr/share/wordpress/:/my/new/path