代码之家  ›  专栏  ›  技术社区  ›  user1790300

移动节点。js到docker容器,接收到无法文件模块错误

  •  5
  • user1790300  · 技术社区  · 8 年前

    我正在尝试创建一个节点。api层的js docker容器,从scr文件夹复制的typescript传输到dist文件夹。节点。js容器似乎立即退出,当我发出docker compose日志时,我得到“错误:找不到模块“/usr/src/app/webapp.js”,然而,当我用-d选项打开容器时,我可以看到文件和目录结构在正确的层次结构中的位置。这里可能出了什么问题?为什么node无法定位webapp。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
    

    docker撰写。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
    
    1 回复  |  直到 8 年前
        1
  •  8
  •   Dan Lowe    8 年前

    在图像构建过程中,您将一些东西安装到 /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 完全被忽略,并被 ./Account 从docker编写的目录。yml位于。

    我对您的项目了解不够,无法告诉您如何正确修复此问题,但这可能就是您的错误来源。建造期间完成的所有工作 /usr/src/app 正在通过在运行时在其上装载另一个目录来撤消。

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

    推荐文章