docker 上的错误 运行 流星

error running meteor on docker

我刚刚在 Docker 上用流星开始了一个项目。当它在 meteor npm install 之后运行 meteor 时,它给出了这个错误

[[[[[ /var/app ]]]]]

=> Started proxy.
/root/.meteor/packages/meteor-tool/.1.4.1_1.139xb76++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/isopackets/ddp/npm/node_modules/meteor/promise/node_modules/meteor-promise/promise_server.js:165
      throw error;
      ^

Error: EPROTO: protocol error, symlink '/root/.meteor/packages/meteor-tool/.1.4.1_1.139xb76++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/server-lib/node_modules' -> '/var/app/.meteor/local/.build677392.build/programs/.build850480.server/node_modules'
    at Error (native)

郑重声明,我是 运行 docker 通过我的 Win 10 上的 virtualbox。看来问题是关于创建符号链接失败,但我安装了相同的 virtualbox 扩展包版本和符号我的 virtualbox 上已经启用了共享文件夹。还有哪些其他可能导致该问题?

更新

this suggestion 中那样,将 --no-bin-links 放入 meteor npm install 没有任何效果。

我有一个灵感来自 this answer 的解决方案。基本上不是弄清楚如何修复符号链接,我们 "move" 流星本地文件到它自己的卷中。这可以通过 docker-compose 创建一个卷来完成。设置将是

version: '2'

services:
  webpack:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/var/app
      - node_modules:/var/app/node_modules
      - meteor_local:/var/app/.meteor/local
    ports:
      - 3000:3000
    links:
      - db
    environment:
      - LANG=en_US.UTF-8
      - LC_ALL=en_US.UTF-8
  db:
    image: mongo
volumes:
  node_modules:
    driver: local
  meteor_local:
    driver: local

如您所见,通过将 .meteor/local 安装到 meteor_local 中,它允许任何需要在容器 space 中创建指向 运行 的符号链接的进程与共享导致进程失败的文件夹。采用这种方法意味着无需在 npm install

之后添加 --no-bin-links