将node.js移动到一个docker容器,收到一个can not file模块错误

我正在尝试创build一个node.jsdocker容器的api图层转录从打字稿从scr文件夹复制到dist文件夹。 node.js容器似乎立即退出,当我发出docker-compose日志时,我得到“错误:无法find模块'/usr/src/app/webapp.js'”,但是,当我调出容器与 – d选项,我可以看到文件和目录结构在正确的层次结构中。 这里有什么可能是错的? 为什么节点无法findwebapp.js文件?

Dockerfile:

FROM node:latest # install our dependencies and nodejs RUN mkdir -p /usr/src RUN mkdir -p /tmp/dist ADD Account/package.json /tmp/package.json RUN cd /tmp && npm install --production ADD Account/dist /tmp/dist RUN mkdir -p /tmp/node_modules/mongodb-repository ADD Account/node_modules/mongodb-repository /tmp/node_modules/mongodb-repository RUN mkdir -p /usr/src/app && cp -a /tmp/node_modules /usr/src/app && cp -a /tmp/package-lock.json /usr/src/app RUN cp -a /tmp/dist/application /usr/src/app && cp -a /tmp/dist/config /usr/src/app && cp -a /tmp/dist/domain /usr/src/app && cp -a /tmp/dist/infrastructure /usr/src/app RUN cp -a /tmp/dist/routes /usr/src/app && cp -a /tmp/dist/types /usr/src/app && cp -a /tmp/dist/webapp.js /usr/src/app && cp -a /tmp/package.json /usr/src/app RUN chmod 755 /usr/src/app/webapp.js RUN mkdir -p /usr/src/app/bin COPY Account/bin /usr/src/app/bin COPY Account/.env /usr/src/app/.env WORKDIR /usr/src/app CMD [ "node", "webapp.js" ] EXPOSE 3000 

泊坞窗,compose.yml

 version: '2' services: mongo: container_name: "app_mongo" tty: true image: mongo:latest environment: - MONGO_DATA_DIR=/data/db - MONGO_LOG_DIR=/dev/null - MONGO_INITDB_ROOT_USERNAME=******** - MONGO_INITDB_ROOT_PASSWORD=******** volumes: - /data/dbDocker:/data/db ports: - 27017:27017 command: "mongod --smallfiles --auth" rabbitmq: container_name: "app_rabbitmq" tty: true image: rabbitmq:management ports: - "15672:15672" - "15671:15671" - "5672:5672" volumes: - /rabbitmq/lib:/var/lib/rabbitmq - /rabbitmq/log:/var/log/rabbitmq - /rabbitmq/conf:/etc/rabbitmq/ group: container_name: "app_group" build: context: . dockerfile: ./Account/Dockerfile volumes: - ./Account:/usr/src/app/ ports: - "3000:3000" depends_on: - mongo - rabbitmq 

在你的图像构build过程中,你将一些东西安装到/usr/src/app ,然后将其设置为工作目录。 下面是Dockerfile中的行:

 RUN mkdir -p /usr/src RUN mkdir -p /usr/src/app && cp -a /tmp/node_modules /usr/src/app && cp -a /tmp/package-lock.json /usr/src/app RUN cp -a /tmp/dist/application /usr/src/app && cp -a /tmp/dist/config /usr/src/app && cp -a /tmp/dist/domain /usr/src/app && cp -a /tmp/dist/infrastructure /usr/src/app RUN cp -a /tmp/dist/routes /usr/src/app && cp -a /tmp/dist/types /usr/src/app && cp -a /tmp/dist/webapp.js /usr/src/app && cp -a /tmp/package.json /usr/src/app RUN chmod 755 /usr/src/app/webapp.js RUN mkdir -p /usr/src/app/bin COPY Account/bin /usr/src/app/bin COPY Account/.env /usr/src/app/.env WORKDIR /usr/src/app 

在构build阶段之后,所有这些都会烘焙到您的图像中,并准备好使用。 但在运行时,你告诉docker-compose:

 volumes: - ./Account:/usr/src/app/ 

这是一个覆盖安装。 无论内build在/usr/src/app的图像被完全忽略,并由./Account -compose.yml所在的目录中的./Account内容取代。

我不太了解你的项目,告诉你如何正确地解决这个问题,但这是你的错误可能来自哪里。 在构build/usr/src/app过程中所做的所有工作都是通过在运行时在其上面安装另一个目录来取消的。

如果你删除了这个卷挂载,所有的/usr/src/app仍然存在,并且可以使用。 但是,这可能有其他的副作用,你将需要考虑到,使您的应用程序的工作。