Issues with mongo with mounted volume for data

Expected behavior

I’m trying to start up Graylog2 in docker as per the Graylog2 docs here: http://docs.graylog.org/en/2.0/pages/installation/docker.html

I’ve set up Docker to share the drive where my docker-compose file is located.

My docker-compose:

some-mongo:
image: “mongo:latest”
volumes:
- ./graylog/data/mongo:/data/db
some-elasticsearch:
image: “elasticsearch:latest”
command: “elasticsearch -Des.cluster.name=‘graylog’”
volumes:
- ./graylog/data/elasticsearch:/usr/share/elasticsearch/data
graylog:
image: graylog2/server:latest
volumes:
- ./graylog/data/journal:/usr/share/graylog/data/journal
- ./graylog/config:/usr/share/graylog/data/config
environment:
GRAYLOG_PASSWORD_SECRET: somepasswordpepper
GRAYLOG_ROOT_PASSWORD_SHA2: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
GRAYLOG_REST_TRANSPORT_URI: http://127.0.0.1:12900
links:
- some-mongo:mongo
- some-elasticsearch:elasticsearch
ports:
- “9000:9000”
- “12900:12900”

Actual behavior

PS C:.ws.local\GraylogPoC> docker-compose up
Creating graylogpoc_some-elasticsearch_1
Creating graylogpoc_some-mongo_1
Creating graylogpoc_graylog_1

ERROR: for graylog Cannot link to a non running container: /graylogpoc_some-mongo_1 AS /graylogpoc_graylog_1/graylogpoc
_some-mongo_1
Traceback (most recent call last):
File “”, line 3, in
File “compose\cli\main.py”, line 63, in main
AttributeError: ‘ProjectError’ object has no attribute ‘msg’
docker-compose returned -1
PS C:.ws.local\GraylogPoC>

When I try to run just the graylogpoc_some-mongo_1 container, I get the following logs:

2016-06-09T17:21:55.356+0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=b0b60d68d356
2016-06-09T17:21:55.356+0000 I CONTROL [initandlisten] db version v3.2.6
2016-06-09T17:21:55.356+0000 I CONTROL [initandlisten] git version: 05552b562c7a0b3143a729aaa0838e558dc49b25
2016-06-09T17:21:55.356+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
2016-06-09T17:21:55.356+0000 I CONTROL [initandlisten] allocator: tcmalloc
2016-06-09T17:21:55.356+0000 I CONTROL [initandlisten] modules: none
2016-06-09T17:21:55.356+0000 I CONTROL [initandlisten] build environment:
2016-06-09T17:21:55.356+0000 I CONTROL [initandlisten] distmod: debian71
2016-06-09T17:21:55.356+0000 I CONTROL [initandlisten] distarch: x86_64
2016-06-09T17:21:55.356+0000 I CONTROL [initandlisten] target_arch: x86_64
2016-06-09T17:21:55.356+0000 I CONTROL [initandlisten] options: {}
2016-06-09T17:21:55.362+0000 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=1G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2016-06-09T17:21:55.371+0000 E STORAGE [initandlisten] WiredTiger (17) [1465492915:371615][1:0x7fd2b835dc80], connection: /data/db/WiredTiger.wt: handle-open: open: File exists
2016-06-09T17:21:55.373+0000 I STORAGE [initandlisten] WiredTiger unexpected file WiredTiger.wt found, renamed to WiredTiger.wt.1
2016-06-09T17:21:55.374+0000 E STORAGE [initandlisten] WiredTiger (1) [1465492915:374220][1:0x7fd2b835dc80], connection: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
2016-06-09T17:21:55.375+0000 I - [initandlisten] Assertion: 28595:1: Operation not permitted
2016-06-09T17:21:55.375+0000 I STORAGE [initandlisten] exception in initAndListen: 28595 1: Operation not permitted, terminating
2016-06-09T17:21:55.375+0000 I CONTROL [initandlisten] dbexit: rc: 100

Information

This is related to a diagnostic I uploaded with id: 761b2a03-ca50-46a8-8a63-f72f678363b7

I think this is similar to an error discussed in this GitHub issue: Issues with mongo with mounted volume for data · Issue #28 · Parallels/docker-machine-parallels · GitHub

That issue explains that Mongo’s need to use memory mapped IO for its data files wasn’t supported by the Parallels shared folder.

I’m guessing a similar issue could be at play for files shared by Hyper-V with the Docker Host VM.

If this is the case, is there a plan to support memory mapped access to docker volumes? I’m guessing that most DBMS–not just Mongo–have similar file access needs.

Steps to reproduce the behavior

  1. Share C: drive in Docker’s Shared Drives setting
  2. Set up docker-compose.yml
  3. docker-compose up

I’m getting the same issue. There’s a lot of discussion of filesystems in this topic: Symlinks on shared volumes not supported . By the sound of it, the ntfs-ver-smb file system doesn’t act very unix-like (e.g. doesn’t do symlinks), so the docker team are working on better filesystem integration. We may have to wait a while longer for mongodb on docker on windows :(-

Docker for Windows uses a Samba share, it seems like it should work: http://stackoverflow.com/questions/15610385/meteor-unexpected-mongo-exit-code-100

I suspect that there might be MongoDB configuration to avoid this issue. Maybe not using WT storage engine, for instance. I haven’t gotten a chance to work on it yet; way cheaper to abandon Windows and run the MongoDB containers on a linux node.