为什么 meteor 没有安装在我的 docker 容器中?

Why is meteor not installed inside my docker container?

我最近将我的流星应用切换为使用 Docker,因为我正在尝试创建一个新的微服务。以前,我会使用 meteor 运行 在本地部署我的应用程序,但我已经切换到 docker-compose up --build,在我的项目的根目录中使用 docker-compose.yml,在我的 Meteor 中使用 Dockerfile应用程序的目录。我终于得到了 运行ning 的东西,这很棒,但我现在正在尝试构建一个开发版本,但 运行ning 遇到了一些麻烦。

在我的 Dockerfile.dev 我是:

  1. 设置节点版本
  2. 声明 Meteor 版本和我的应用程序的代码目录
  3. 为容器创建一个 /src 目录
  4. 安装流星
  5. 正在将 package*.json 个文件复制到 /src
  6. 通过 npm install
  7. 安装 npm 包
  8. 正在将我的应用程序的源代码复制到 /src
  9. 正在将工作目录设置为 /src
  10. 最后,运行将应用程序与 meteor run

docker文件正在 运行 应用程序,但随后我的应用程序退出,因为它找不到流星。这很奇怪,因为它不应该 必须 找到流星来首先启动应用程序吗?无论如何,我迷路了,任何帮助将不胜感激。提前致谢:)

docker-compose.yml

version: '3'

services:
  myapp:
    build:
      context: ./js/myapp
      dockerfile: Dockerfile.dev
    ports:
      - '3000:3000'
    links:
      - mongo
    environment:
      ROOT_URL: ${APP_ROOT_URL:-http://localhost}
      MONGO_URL: mongodb://mongo:27017/meteor
      PORT: 3000
  mongo:
    image: mongo:latest
    command:
      - --storageEngine=wiredTiger
    volumes:
      - data:/data/db

volumes:
  data:

Dockerfile.dev

# Inspired by: https://github.com/banjerluke/meteor-dockerfile

FROM node:14.17.5 as builder

ENV METEOR_VERSION=2.3.4 \
    APP_SRC_FOLDER=.

RUN mkdir -p /opt/src


RUN echo "\n[*] Installing Meteor ${METEOR_VERSION} to ${HOME}"\
&& curl -s https://install.meteor.com/?release=${METEOR_VERSION} | sed s/--progress-bar/-sL/g | sh

FROM node:14.17.5-alpine as runner

ENV NODE_ENV=dev

COPY $APP_SRC_FOLDER/package*.json /opt/src/

RUN echo '\n[*] Installing Meteor server NPM dependencies' \
&& cd /opt/src \
&& npm install


COPY $APP_SRC_FOLDER /opt/src/

WORKDIR /opt/src/

CMD ["meteor", "run"]

错误

myapp_1  | internal/modules/cjs/loader.js:892
myapp_1  |   throw err;
myapp_1  |   ^
myapp_1  | 
myapp_1  | Error: Cannot find module '/opt/src/meteor'
myapp_1  |     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:889:15)
myapp_1  |     at Function.Module._load (internal/modules/cjs/loader.js:745:27)
myapp_1  |     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
myapp_1  |     at internal/main/run_main_module.js:17:47 {
myapp_1  |   code: 'MODULE_NOT_FOUND',
myapp_1  |   requireStack: []
myapp_1  | }
myapp_myapp_1 exited with code 1

我认为问题出在 FROM node:14.17.5-alpine as runner 出于某种原因,这张图片导致了启动问题。删除它是罪魁祸首!我成功获取了应用程序 运行!

该应用程序的启动确实比 meteor run 慢,但现在我会接受它:)