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