在docker容器中安装主机目录非常容易。
但我需要反过来。
我使用docker容器作为开发WordPress插件的开发环境。这个docker容器包含运行WordPress(MySQL,Apache,PHP和WordPress)所需的一切。我将插件src文件夹从docker容器中的主机挂载,这样我就可以在开发过程中测试我的插件。
对于调试,如果我在主机上运行的IDE对docker容器中的WordPress文件具有读访问权,那将会很有帮助。
我找到了解决这个问题的两种方法,但两者看起来都非常糟糕。
使用WordPress文件的路径
将数据卷添加到docker容器docker run ... -v / usr / share / wordpress / ...
Docker将此目录添加到主机/ var / lib / docker / vfs / dir上的路径...但是您需要使用docker inspect查找实际路径,并且需要root访问权限才能查看文件。 / p>
将主机目录挂载到docker容器,并将容器中的WordPress文件复制到该挂载的主机目录。符号链接似乎不起作用。
有没有更好的方法呢?没有复制文件或更改访问权限?
谢谢!
答案 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
。