无法在windows上启动docker mongo映像

无法在windows上启动docker mongo映像,windows,mongodb,docker,Windows,Mongodb,Docker,启动映像时,我遇到以下错误: 2019-02-27T17:09:41.095+0000 E STORAGE [initandlisten] WiredTiger error (17) [1551287381:95206][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: File exists Raw: [1551287381:95206][1:0

启动映像时,我遇到以下错误:

 2019-02-27T17:09:41.095+0000 E STORAGE  [initandlisten] WiredTiger error (17) [1551287381:95206][1:0x7fae36fc4a40], connection: __posix_open_file, 715:
/data/db/WiredTiger.wt: handle-open: open: File exists Raw: [1551287381:95206][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: File exists
2019-02-27T17:09:41.108+0000 I STORAGE  [initandlisten] WiredTiger message unexpected file WiredTiger.wt found, renamed to WiredTiger.wt.6
2019-02-27T17:09:41.111+0000 E STORAGE  [initandlisten] WiredTiger error (1) [1551287381:111166][1:0x7fae36fc4a40], connection: __posix_open_file, 715:
/data/db/WiredTiger.wt: handle-open: open: Operation not permitted Raw: [1551287381:111166][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
2019-02-27T17:09:41.149+0000 E STORAGE  [initandlisten] WiredTiger error (17) [1551287381:149030][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: File exists Raw: [1551287381:149030][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: File exists
2019-02-27T17:09:41.153+0000 I STORAGE  [initandlisten] WiredTiger message unexpected file WiredTiger.wt found, renamed to WiredTiger.wt.7
2019-02-27T17:09:41.156+0000 E STORAGE  [initandlisten] WiredTiger error (1) [1551287381:156133][1:0x7fae36fc4a40], connection: __posix_open_file, 715:
/data/db/WiredTiger.wt: handle-open: open: Operation not permitted Raw: [1551287381:156133][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
2019-02-27T17:09:41.177+0000 E STORAGE  [initandlisten] WiredTiger error (17) [1551287381:177375][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: File exists Raw: [1551287381:177375][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: File exists
2019-02-27T17:09:41.192+0000 I STORAGE  [initandlisten] WiredTiger message unexpected file WiredTiger.wt found, renamed to WiredTiger.wt.8
2019-02-27T17:09:41.194+0000 E STORAGE  [initandlisten] WiredTiger error (1) [1551287381:194762][1:0x7fae36fc4a40], connection: __posix_open_file, 715:
/data/db/WiredTiger.wt: handle-open: open: Operation not permitted Raw: [1551287381:194762][1:0x7fae36fc4a40], connection: __posix_open_file, 715: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
2019-02-27T17:09:41.200+0000 W STORAGE  [initandlisten] Failed to start up WiredTiger under any compatibility version.
2019-02-27T17:09:41.200+0000 F STORAGE  [initandlisten] Reason: 1: Operation not permitted
2019-02-27T17:09:41.201+0000 F -        [initandlisten] Fatal Assertion 28595 at src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 704
.env文件夹值为

MONGO_SAVE_PATH=./database/db
DB docker文件:

FROM mongo:latest
VOLUME ["/data/db"]
WORKDIR /data
EXPOSE 27017
CMD ["mongod"]
docker-compose.yml数据库容器

services:
  my-mongo-db:
  build: ./database
  ports:
   - 32815:27017
  volumes:
- ./database/db:/data/db
我不知道如何解决这个问题。然而,在linux和Mac上,这个问题并没有出现

警告(Windows&OS X):Windows和OS X上的默认Docker设置 使用VirtualBox VM托管Docker守护程序。不幸的是 VirtualBox用于在主机系统和服务器之间共享文件夹的机制 Docker容器与内存映射文件不兼容 MongoDB使用(请参阅vbox bug、docs.MongoDB.org和相关文档 jira.mongodb.org bug)。这意味着不可能运行 数据目录映射到主机的MongoDB容器

持久化数据的解决方法:

docker volume create --name=mongodata
docker run -d -p 27017:27017 -v mongodata:/data/db --name=mymongo mongodb:3.3

更多信息

如果您使用docker compose,则以下是复制上述答案的方法

services:
  mongodb_container:
    ...
    volumes:
      - mongodata:/data/db
volumes:
  mongodata:
请注意,上面的示例表明mongodb存储只需要yml文件的一部分。

虽然是正确的,但我发现答案对于
docker compose.yml
特别有用

作为解决办法,您可以做的是:

  • 在与您的
    docker compose
    文件相同的路径中创建
    .env
    文件,并将当前路径存储在环境变量中,如下所示:
  • 现在,在
    docker compose
    文件中,替换上述变量:
    • 如果要查看实际路径如何替换环境变量,可以使用以下命令:
    此外,如果使用C:\以外的任何磁盘驱动器,则可能需要更改Docker文件共享设置:


    希望这能有所帮助。

    不是完全相同的问题,但我在Ubuntu中为mongo旋转Docker容器并尝试将现有目录装载到容器时看到了相同的错误消息:

    docker run --name some-mongo -p 27017:27017 -v $PWD/db-data:/data/db -d mongo
    

    在我的例子中,只有当我试图从我安装的硬盘上的目录运行命令时,才会出现错误,我可以通过将带有/db data目录的代码库迁移到安装Ubuntu的SSD来解决这个问题。

    谢谢你的回复,但我没有使用虚拟机,我使用的是VM。即使windows上使用Hpyer-V的桌面docker的默认发行版,这个答案仍然适用。使用docker卷创建,你会没事的。有吗为了使用docker compose修改上述命令,我遇到了同样的问题:嗨,我试过这个,但没能让它工作。我在docker-compose.yml旁边的文件夹中创建了一个名为.env的文件,但它仍然不起作用。有没有办法测试正在读取的.env文件?我在visual Studio中使用asp.net内核是的,实际上,正如我也提到的,您可以运行
    docker compose config
    。在所有占位符被实际值替换后,它应该向您显示实际文件内容感谢帮助。我最终成功了,但mongo仍然犯同样的错误。我可以看到它正在写入所有WiredTiger.wt.2文件(数字还在上升)。还有什么可能是错误的吗?这取决于你会犯什么样的错误。你能用docker日志检查日志吗?谢谢你的帮助。我创建了一个新问题,这样我就可以包含日志了。日志文件重复我粘贴的行。在windows中,mongodata卷最终映射到哪里?@bind装载卷不会直接映射到任何windows文件夹位置。它完全由docker管理。谢谢你的回答。我想如果你想保存任何文件,你只需要手动复制它们?别忘了把
    版本:“3”
    放在
    services
    上面,在
    mongodata:
    后面应该有另一个空行,否则可能是compose版本2.3引发的错误
        services:
          my-mongo-db:
          build: ./database
          ports:
           - 32815:27017
          volumes:
        - ${MONGO_HOST_DATA}/database/db:/data/db
    
    docker-compose config
    
    docker run --name some-mongo -p 27017:27017 -v $PWD/db-data:/data/db -d mongo