我想将一个目录从docker容器挂载到本地文件系统。该目录是一个网站根目录,我需要能够使用任何编辑器编辑我的本地计算机。
我知道我可以运行docker run -v local_path:container_path
,但这样做只会在容器内创建一个空目录。
如何在linux主机上的docker容器中挂载一个目录?
答案 0 :(得分:1)
这有点奇怪,但您可以使用命名卷。尽管主机安装了卷,但已命名的卷不会被删除。你可以访问目录。参见示例:
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
这不是你要求的,但取决于你的需求是否有效
此致
答案 1 :(得分:0)
如果您的目标是提供准备好的LAMP,则应使用Dockerfile中的VOLUMES声明。
VOLUME volume_path_in_container
问题是docker不会挂载文件,因为它们已经存在于您创建卷的路径中。你可以像@ Grif-fin在评论中说的那样或者修改容器的入口点,这样他就可以在运行时复制你想要暴露给卷的文件。
您必须使用Dockerfile中的build COPY
或ADD
命令插入数据,以便基本文件存在于容器中。
然后创建一个入口点,将文件从COPY
路径复制到卷路径。
然后使用-v标记运行容器,类似-v local_path:volume_path_in_container
。像这样,您应该将容器内的文件安装在本地。 (至少,这是我添加的)。
在此处查找示例:https://github.com/titouanfreville/Docker/tree/master/ready_to_go_lamp。
它将避免每次都必须构建,并且您可以从最终图像提供它。
为了更好,最好添加一个用户支持,这样你就是已安装文件的所有者(如果你不是root用户)。
希望它对你有用。