【问题标题】:How to set docker mongo data volume如何设置docker mongo数据量
【发布时间】:2016-05-25 20:29:42
【问题描述】:

我想使用 Dockerizing MongoDB 并将数据存储在本地卷中。

但是..失败了...

它有mongo:latest 图像

kerydeMacBook-Pro:~ hu$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
mongo               latest              b11eedbc330f        2 weeks ago         317.4 MB
ubuntu              latest              6cc0fc2a5ee3        3 weeks ago         187.9 MB

我想将单声道数据存储在~/data 中。所以---

kerydeMacBook-Pro:~ hu$ docker run -p 27017:27017 -v ~/data:/data/db --name mongo -d mongo
f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43

但是......它不起作用......

docker ps -- 没有守护进程 mongo

kerydeMacBook-Pro:~ hu$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

尝试运行“mongo”--失败

kerydeMacBook-Pro:~ hu$ docker exec -it f57 bash
Error response from daemon: Container f57 is not running

docker 检查 mongo

kerydeMacBook-Pro:~ hu$ docker inspect mongo
[
{
    "Id": "f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43",
    "Created": "2016-02-15T02:19:01.617824401Z",
    "Path": "/entrypoint.sh",
    "Args": [
        "mongod"
    ],
    "State": {
        "Status": "exited",
        "Running": false,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 0,
        "ExitCode": 100,
        "Error": "",
        "StartedAt": "2016-02-15T02:19:01.74102535Z",
        "FinishedAt": "2016-02-15T02:19:01.806376434Z"
    },




"Mounts": [
        {
            "Source": "/Users/hushuming/data",
            "Destination": "/data/db",
            "Mode": "",
            "RW": true
        },
        {
            "Name": "365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a",
            "Source": "/mnt/sda1/var/lib/docker/volumes/365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a/_data",
            "Destination": "/data/configdb",
            "Driver": "local",
            "Mode": "",
            "RW": true
        }
    ],

如果我不设置数据量,mongo image可以工作!

但是,当设置数据量时,它不能。谁能帮帮我?

【问题讨论】:

    标签: mongodb docker


    【解决方案1】:

    尝试检查docker logs 以查看容器停止并进入“已存在”模式时发生的情况。

    另请参阅指定卷的完整路径是否有帮助:

    docker run -p 27017:27017 -v /home/<user>/data:/data/db  ...
    

    OP 补充说:

    docker logs mongo 
    exception in initAndListen: 98 
    Unable to create/open lock file: /data/db/mongod.lock 
    errno:13 Permission denied 
    Is a mongod instance already running?
    terminating 2016-02-15T06:19:17.638+0000 
    I CONTROL [initandlisten] dbexit: rc: 100 
    

    一个 errno:13 是 issue 30 的意义所在。

    This comment 补充:

    这是一个文件所有权/权限问题(与此 docker 映像无关),使用带有 VB 的 boot2docker 或带有 VB 的 vagrant box。

    尽管如此,我还是设法破解了所有权,将 boot2docker 内的 /Users 共享卷重新挂载到 uid 999 和 gid 999(这是 mongo docker 映像使用的),然后开始使用: p>

    $ boot2docker ssh
    $ sudo umount /Users
    $ sudo mount -t vboxsf -o uid=999,gid=999 Users /Users
    

    但是... mongod 由于文件系统类型不受支持而崩溃(mmap 不适用于 vboxsf)

    所以实际的解决方案是尝试DVC: Data Volume Container,因为现在mongodb doc 提到:

    MongoDB 需要一个在目录上支持 fsync() 的文件系统。
    例如 HGFS 和 Virtual Box 的共享文件夹不支持这个 操作。

    所以:

    由于 virtualbox 共享文件夹的工作方式,安装到 OSX 将不适用于 MongoDB。


    对于 DVC(数据卷容器),请尝试 docker volume create

    docker volume create mongodbdata
    

    然后将其用作:

    docker run -p 27017:27017 -v mongodbdata:/data/db  ...    
    

    然后看看是否效果更好。

    正如我提到的in the comments

    docker volume inspect mongodbdata(参见docker volume inspect)会给你它的路径(如果你需要,你可以备份)

    【讨论】:

    • run docker logs mongo ,--initAndListen 中的异常:98 无法创建/打开锁定文件:/data/db/mongod.lock errno:13 Permission denied mongod 实例是否已经在运行?,终止2016-02-15T06:19:17.638+0000 我控制 [initandlisten] dbexit: rc: 100
    • 可能是权限问题
    • @KeryHu 我已经编辑了答案以提供可能的解决方法。
    • @KeryHu 我已经使用 DVC(数据卷容器)替代方案编辑了答案,因为您无法将本地文件夹挂载到容器中。
    • @VonCYes,谢谢你的回答,我现在才看到。但运行 boot2docker ssh bash: boot2docker: command not found ,
    【解决方案2】:

    截至 2017 年夏季,本地卷不是最佳做法。

    Docker Docs:

    卷是保存由 Docker 容器生成和使用的数据的首选机制。

    docker volume create mongodbdata
    docker run -p 27017:27017 -v mongodbdata:/data/db mongo
    

    【讨论】:

    【解决方案3】:

    通过 Docker 撰写:

    version: '2'
        services:
          mongodb:
            image: mongo:latest
            volumes:
              - ./<your-local-path>:/data/db
    

    /data/db是容器上保存数据的位置。

    &lt;your-local-path&gt; 是您机器上的位置,也就是将保存实际数据库日志文件的主机。

    【讨论】:

    【解决方案4】:

    找到一个链接:VirtualBox 共享文件夹不是supported by mongodb

    【讨论】:

      【解决方案5】:

      对于在 Windows 上运行 MongoDB 容器的任何人:如 here 所述,当您使用路径(我们称之为 local volume)将卷从 Windows 主机装载到 MongoDB 容器时会出现问题。

      您可以使用Docker volume(由 Docker 管理的卷)解决此问题:

      docker volume create mongodata
      

      或者使用docker-compose作为我的偏好:

      version: "3.4"
      
      services:
        ....
        
        db:
          image: mongo
          volumes:
            - mongodata:/data/db
          restart: unless-stopped
       
      volumes:
        mongodata:
      

      在 Windows 10 上测试并且可以正常工作

      【讨论】:

      • docker 卷创建 mongodata
      猜你喜欢
      • 2013-06-26
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 2019-03-13
      • 2018-02-23
      • 1970-01-01
      相关资源
      最近更新 更多