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

How to mount a directory inside a docker container on Linux host

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

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

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

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

您必须使用 build COPYADD 命令在 Dockerfile 中插入数据,这样基础文件才会出现在容器中。

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

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

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

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

更好的是,最好添加一个用户支持,这样您就可以成为已安装文件的所有者(如果您不是 root)。

希望对你有用。

这有点奇怪,但您可以为此使用命名卷。尽管主机安装了卷,但命名的卷不会被清空。你可以访问目录。看例子:

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

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

此致