如何设置docker mongo数据量

Ker*_* Hu 39 mongodb docker

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

但......失败了......

它有mongo:最新的图像

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
Run Code Online (Sandbox Code Playgroud)

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

kerydeMacBook-Pro:~ hu$ docker run -p 27017:27017 -v ~/data:/data/db --name mongo -d mongo
f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43
Run Code Online (Sandbox Code Playgroud)

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

docker ps - 没有守护进程mongo

kerydeMacBook-Pro:~ hu$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
Run Code Online (Sandbox Code Playgroud)

尝试运行"mongo" - 失败

kerydeMacBook-Pro:~ hu$ docker exec -it f57 bash
Error response from daemon: Container f57 is not running
Run Code Online (Sandbox Code Playgroud)

码头工人检查蒙戈

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
        }
    ],
Run Code Online (Sandbox Code Playgroud)

如果我没有设置数据量,mongo图像可以工作!

但是,在设置数据量时,它不是......谁可以帮助我?

Von*_*onC 37

尝试并检查泊坞窗日志,以查看容器停止并进入"已存在"模式时发生的情况.

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

docker run -p 27017:27017 -v /home/<user>/data:/data/db  ...
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

错误:13是30的问题.

这条评论补充道:

这是一个文件所有权/权限问题(与此docker镜像无关),无论是使用带有VB的boot2docker还是带有VB的流浪盒.

然而,我设法破解了所有权,将boot2docker中的/ Users共享卷重新安装到uid 999和gid 999(这是mongo docker镜像使用的)并启动它:

$ boot2docker ssh
$ sudo umount /Users
$ sudo mount -t vboxsf -o uid=999,gid=999 Users /Users
Run Code Online (Sandbox Code Playgroud)

但是...由于文件系统类型不受支持而导致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
Run Code Online (Sandbox Code Playgroud)

然后用它作为:

docker run -p 27017:27017 -v mongodbdata:/data/db  ...    
Run Code Online (Sandbox Code Playgroud)

并看看它是否更好.

正如我在评论中提到的那样:

A docker volume inspect mongodbdata(参见参考资料docker volume inspect)将为您提供路径(如果需要,可以备份)


Ric*_*ard 25

通过Docker撰写:

version: '2'
    services:
      mongodb:
        image: mongo:latest
        volumes:
          - ./<your-local-path>:/data/db
Run Code Online (Sandbox Code Playgroud)

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

<your-local-path> 是您机器上的位置AKA是将保存实际数据库日志文件的主机.

  • 此方法使用绑定安装,这不是首选,应该使用 docker `volumes` 代替 https://docs.docker.com/storage/volumes/ (3认同)

Jos*_*ook 24

截至2017年夏季,当地交易量不被视为最佳做法.

每个Docker文档:

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

docker volume create mongodbdata
docker run -p 27017:27017 -v mongodbdata:/data/db mongo
Run Code Online (Sandbox Code Playgroud)

  • 此语句的新 URL 是 https://docs.docker.com/storage/volumes/ (3认同)

Duc*_*Mai 6

对于在Windows上运行的MongoDB容器的任何一个:所描述这里,那里当你使用路径(我们称之为从Windows主机装配卷到MongoDB的容器是一个问题local volume)。

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

docker volume create mongodata
Run Code Online (Sandbox Code Playgroud)

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

docker volume create mongodata
Run Code Online (Sandbox Code Playgroud)

在 Windows 10 上测试过,它可以工作