gpt4 book ai didi

node.js - 将 node.js 移动到 docker 容器,收到无法文件模块错误

转载 作者:搜寻专家 更新时间:2023-10-31 23:01:23 26 4
gpt4 key购买 nike

我正在尝试为从 scr 文件夹复制到 dist 文件夹的 typescript 转译的 api 层创建一个 node.js docker 容器。 node.js 容器似乎立即退出,当我发出 docker-compose 日志时,我得到“错误:找不到模块'/usr/src/app/webapp.js'”,但是,当我使用 - d 选项,我可以看到文件和目录结构在正确的层次结构中的位置。这里有什么问题?为什么 Node 找不到 webapp.js 文件?

码头文件:

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

docker-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

最佳答案

在构建镜像期间,将一些东西安装到 /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

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

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

这是一个覆盖安装。 /usr/src/app 中的镜像中的任何内容都将被完全忽略并替换为 docker-compose.yml 所在目录中的 ./Account 的内容.

我对您的项目了解不多,无法告诉您如何正确解决此问题,但这可能就是您的错误来源。在构建期间为构造 /usr/src/app 所做的所有工作都通过在运行时在其顶部安装另一个目录来撤消。

如果您删除该卷安装,所有 /usr/src/app 仍然存在并可以使用。但这可能会产生其他副作用,您需要考虑这些副作用才能让您的应用发挥作用。

关于node.js - 将 node.js 移动到 docker 容器,收到无法文件模块错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47413823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com