簡體   English   中英

Docker - “缺少腳本:”dev“” - 但它在那里?

[英]Docker - “Missing script: ”dev“” - But it's there?

我正在將 Docker Compose 用於 React/Express 應用程序。

服務器的 Dockerfile:

FROM node:latest 
WORKDIR /app/server 
COPY package.json /app/server
COPY package-lock.json /app/server 
RUN npm install 
COPY . /app/server
CMD [ "npm", "run", "dev" ]

客戶端的 Dockerfile:

FROM node:latest
WORKDIR /app/client
COPY package.json /app/client
COPY package-lock.json /app/client
RUN npm install
COPY . /app/client
CMD [ "npm", "start" ]

還有我的 docker-compose 文件:

version: '3' 
services:
    server:
        build: ./server
        expose: 
            - "3001"
        ports:
            - "3001:3001"
        volumes:
            - ./server/src/:/app/server
        command: npm run dev
        tty: true

    client:
        build: ./client
        expose:
            - "3000"
        ports:
            - "3000:3000"
        volumes: 
            - ./client/src/:/app/client
        links:
            - server
        command: npm run start
        tty: true

運行“docker-compose up”后,服務器崩潰:

錯誤! 缺少腳本:“開發”

但是,我的 package.json 中有一個“開發”腳本:

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "nodemon index.js",
    "start": "node index.js"
  },

這里有什么問題? 劇本就在那里。 我的 Docker 文件有問題嗎? “npm run dev”在沒有 Docker 的情況下也能正常工作。

謝謝!

嗯,顯然,Docker 找不到包含dev腳本的 package.json 文件。

我的第一個建議是確保 package.json 位於項目的根文件夾中,與 docker-compose.yml 處於同一文件夾級別。

當你docker-compose.yml文件說

volumes:
  - ./server/src/:/app/server

這會隱藏 Dockerfile 在/app/server目錄中所做的一切,並將其替換為該主機目錄的內容。 由於您的 Dockerfile 所做的唯一事情是在/app/server目錄中,因此您實際上根本沒有使用您的 Docker 映像。

我通常建議刪除這些volumes:以及其他一些不必要的選項。 (您幾乎不需要expose: Compose 中的端口;您不需要重復command:來自圖像; links:是過時的網絡設置。)您可以將文件減少到僅

version: '3.8'
services:
    server:
        build: ./server
        ports:
            - "3001:3001"
    client:
        build: ./client
        ports:
            - "3000:3000"

如果您確實包含了volumes: ,則需要確保已安裝內容的布局與容器中的內容完全匹配。 (嘗試使用和不使用volumes:運行docker-compose run server ls volumes:行。)在這里,您從./server目錄構建映像,然后將其src子目錄掛載到整個應用程序。 僅將其安裝在容器內的src子目錄中可能會更好

volumes:
  - ./server/src:/app/server/src

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM