代码之家  ›  专栏  ›  技术社区  ›  Allyl Isocyanate

装载docker compose卷以重新加载代码时出错

  •  0
  • Allyl Isocyanate  · 技术社区  · 6 年前

    我有一个简单的节点脚本,dockerfile和docker组成定义:

    app/package.json软件包

    {
      "name": "puppeteer-scrape",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "dependencies": {
        "nodemon": "^1.18.10",
      },
      "scripts": {
        "start": "nodemon scrape.js"
      }
    }
    

    应用程序/文档文件

    FROM node:8.11.3
    
    RUN mkdir -p /app
    WORKDIR /app
    
    COPY ./package* /app/
    RUN npm install
    COPY ./*.js /app/
    
    CMD ["npm", "start"]
    

    docker-compose.yml文件

    version: '3'
    services:
      app:
        build: app
        volumes:
         - .:/app
    

    我想配置docker compose,以便在更改应用程序时重新运行脚本。

    这个 official docker-compose tutorial 建议使用如上所述的体积定义来执行此操作。但是当我跑的时候 docker-compose up 我得到:

    $ docker-compose up
    app_1  | npm ERR! path /app/package.json
    app_1  | npm ERR! code ENOENT
    app_1  | npm ERR! errno -2
    app_1  | npm ERR! syscall open
    app_1  | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
    app_1  | npm ERR! enoent This is related to npm not being able to find a file.
    app_1  | npm ERR! enoent 
    app_1  | 
    app_1  | npm ERR! A complete log of this run can be found in:
    app_1  | npm ERR!     /root/.npm/_logs/2019-03-02T23_54_53_560Z-debug.log
    

    似乎应用程序目录被覆盖了,或者 npm start 正在复制应用程序之前调用。正确的配置方法是什么?

    0 回复  |  直到 6 年前
        1
  •  1
  •   whites11    6 年前

    问题是路径不匹配:

    • 容器尝试运行的命令是 npm start app 目录(容器内);
    • npm 想要 package.json 文件在当前目录下,但与Docker合成你是安装在应用程序目录内;
    • 正如你所提到的, 包装袋 文件位于主机的app目录中,这意味着它将被放置在 /app/app 正在运行的容器中的目录。

    解决方案:要么更改 WORKDIR 在待审文件中 应用程序/应用程序 或分享 应用程序 具有此卷定义的本地目录 docker-compose.yml

    volumes:
    - ./app:/app