如何配置 mongodb 在 docker 中运行以在 Windows 上使用外部驱动器

2024-03-02

我正在尝试设置一个 docker 映像,该映像将运行一个 mongo 实例,该实例指向不在默认 docker 容器内的驱动器位置。

我使用以下命令来创建问题:

docker run -p 27017:27017 --name mongo_test -v //c/Users/usrname/mongo_test:/data/db -d mongo

当我运行时,容器立即失败docker container logs mongo_test命令我取回以下转储:

2017-03-13T04:33:33.358+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=4f14ca0711c7
2017-03-13T04:33:33.358+0000 I CONTROL  [initandlisten] db version v3.4.2
2017-03-13T04:33:33.358+0000 I CONTROL  [initandlisten] git version: 3f76e40c105fc223b3e5aac3e20dcd026b83b38b
2017-03-13T04:33:33.358+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1t  3 May 2016
2017-03-13T04:33:33.358+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2017-03-13T04:33:33.358+0000 I CONTROL  [initandlisten] modules: none
2017-03-13T04:33:33.358+0000 I CONTROL  [initandlisten] build environment:
2017-03-13T04:33:33.358+0000 I CONTROL  [initandlisten]     distmod: debian81
2017-03-13T04:33:33.358+0000 I CONTROL  [initandlisten]     distarch: x86_64
2017-03-13T04:33:33.358+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2017-03-13T04:33:33.358+0000 I CONTROL  [initandlisten] options: {}
2017-03-13T04:33:33.363+0000 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=478M,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),
2017-03-13T04:33:33.384+0000 E STORAGE  [initandlisten] WiredTiger error (17) [1489379613:384669][1:0x7f1e6c4f5cc0], connection: /data/db/WiredTiger.wt: handle-open: open: File exists
2017-03-13T04:33:33.385+0000 I STORAGE  [initandlisten] WiredTiger message unexpected file WiredTiger.wt found, renamed to WiredTiger.wt.1
2017-03-13T04:33:33.386+0000 E STORAGE  [initandlisten] WiredTiger error (1) [1489379613:386165][1:0x7f1e6c4f5cc0], connection: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
2017-03-13T04:33:33.386+0000 I -        [initandlisten] Assertion: 28595:1: Operation not permitted src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267
2017-03-13T04:33:33.387+0000 I STORAGE  [initandlisten] exception in initAndListen: 28595 1: Operation not permitted, terminating
2017-03-13T04:33:33.387+0000 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2017-03-13T04:33:33.387+0000 I NETWORK  [initandlisten] removing socket file: /tmp/mongodb-27017.sock
2017-03-13T04:33:33.387+0000 I NETWORK  [initandlisten] shutdown: going to flush diaglog...
2017-03-13T04:33:33.387+0000 I CONTROL  [initandlisten] now exiting
2017-03-13T04:33:33.387+0000 I CONTROL  [initandlisten] shutting down with code:100

我目前运行的是 Windows 10 企业版,它预装了 hyper-v 而不是 virutalbox。据我所知,virtualbox 不支持 docker 的外部映射驱动器,但 hyper-v 应该支持。我还授予 Hyper-V 管理员用户组对该文件的完全控制权,并确保 docker 已映射驱动器。

它可以正确映射驱动器,因为我可以运行 LS 命令 + 它会在出错之前在我映射的目录中创建一个日志文件夹、mongod.lock、WiredTiger、WiredTiger.lock、WiredTiger.wt 和 WiredTiger.wt.1 文件。

任何帮助都会很棒。


这行不通。 Windows 上的 MongoDB 和 Docker 中的映射卷不兼容,例如mongo docker 镜像文档 https://hub.docker.com/_/mongo/:

警告(Windows 和 OS X):Windows 和 OS X 上的默认 Docker 设置使用 VirtualBox VM 来托管 Docker 守护程序。不幸的是,VirtualBox 用于在主机系统和 Docker 容器之间共享文件夹的机制与 MongoDB 使用的内存映射文件不兼容(请参阅vbox bug https://www.virtualbox.org/ticket/819, docs.mongodb.org https://docs.mongodb.com/manual/administration/production-notes/#fsync-on-directories以及相关的jira.mongodb.org https://jira.mongodb.org/browse/SERVER-8600漏洞)。这意味着无法运行数据目录映射到主机的 MongoDB 容器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何配置 mongodb 在 docker 中运行以在 Windows 上使用外部驱动器 的相关文章

随机推荐