[英]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.