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

时间:2016-10-14 13:03:10

标签: linux ubuntu docker docker-volume

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

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

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

2 个答案:

答案 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 COPYADD命令插入数据,以便基本文件存在于容器中。

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

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

在此处查找示例:https://github.com/titouanfreville/Docker/tree/master/ready_to_go_lamp

它将避免每次都必须构建,并且您可以从最终图像提供它。

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

希望它对你有用。