【问题标题】:Docker mongodb - add database on disk to containerDocker mongodb - 将磁盘上的数据库添加到容器
【发布时间】:2015-08-16 18:18:07
【问题描述】:

我在 Windows 上运行 Docker,并且我在磁盘上的 C:\data\db 上有一个包含一些条目的数据库。

我想将此数据库添加到我的容器中。我尝试了很多方法来做到这一点,但都失败了。

我试过了:docker run -p 27017:27017 -v //c/data/db:/data/db --name mongodb devops-mongodb

在我的 dockerfile 我有:

RUN mkdir -p /data/db
VOLUME /data/db

但这不会将我当前在磁盘上的数据库添加到容器中。它会创建一个新的 /data/db 目录并保存我添加到其中的数据。

此处的文档https://docs.docker.com/userguide/dockervolumes/ 在“将主机目录作为数据卷”下专门告诉我执行 -v //c/data/db:/data/db 但这不起作用。

有什么想法吗?

【问题讨论】:

    标签: mongodb docker boot2docker dockerfile dockerhub


    【解决方案1】:

    您正在使用 Boot2Docker(在虚拟机中运行)。 Boot2Docker 使用 VirtualBox 来宾添加使 Windows 机器上的目录可供在虚拟机中运行的 Docker 使用。

    默认情况下,只有C:\Users 目录(在 Windows 上)或/Users/ 目录(在 OS X 上)与虚拟机共享。这些目录之外的任何内容不与虚拟机共享,这会导致 Docker 在卷的指定位置创建一个空目录。

    要与虚拟机共享C:\Users\ 之外的目录,您必须手动配置 Boot2Docker 以共享这些目录。您可以在 README 的VirtualBox guest addition 部分找到所需的步骤;

    如果需要其他路径或共享,可以在运行时通过执行以下操作来安装它:

    $ mount -t vboxsf -o uid=1000,gid=50 your-other-share-name /some/mount/location
    

    还需要注意的是,未来计划将在 VirtualBox 中创建并打开“automount”标志的任何共享在引导期间挂载到共享名称的目录(即共享命名的 home/jsmith 将自动挂载到 /home/jsmith)。

    请注意,使用 VirtualBox 来宾添加会对性能产生非常糟糕的影响(读取/写入卷会非常慢)。这可能适合开发,但应谨慎使用。

    【讨论】:

    • 好的,我明白了,谢谢。所以我可以将/data/db 目录复制到/c/Users 并运行docker run -v //c/Users/data/db:/data/db,这样是否会使dockerfile 中的VOLUME 和RUN 指令过时?
    • 是的,您不需要 Dockerfile 中的 VOLUMERUN 指令; docker 将在您使用-v /host/path:/container/path指定的位置将这些目录(卷)“挂载”到容器内。
    猜你喜欢
    • 2019-09-19
    • 2020-01-04
    • 1970-01-01
    • 2018-09-01
    • 2011-05-06
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多