0

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

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

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

4

2 回答 2

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

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

问候

于 2016-10-14T17:01:30.383 回答
0

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

您必须使用 Dockerfile 中的构建COPYADD命令插入数据,以便基础文件存在于容器中。

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

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

在这里找到一个例子:https ://github.com/titouanfreville/Docker/tree/master/ready_to_go_lamp 。

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

更好的是,添加用户支持会很好,这样您就可以成为已挂载文件的所有者(如果您不是 root)。

希望它对你有用。

于 2016-10-14T14:43:22.497 回答