簡體   English   中英

Dockerfile 看不到 package.json 文件

[英]Dockerfile can not see package.json file

我有這個項目的結構:

- project
-- apps
--- microservice-one
---- Dockerfile
-- package.json
-- docker-compose.yml

這是來自Dockerfile microservice-one的 Dockerfile :

FROM node:12.13-alpine As development

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install 
COPY . .

RUN npm run build

CMD ["node", "dist/main"]

和 docker-compose.yml

services:
  microservice-one:
    container_name: microservice-one
    build:
      context: ./apps/microservice-one
      dockerfile: Dockerfile
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - 3000:3000
    expose: 
      - '3000'
    command: npm run start

為什么在運行docker-compose build之后,我的控制台會拋出這個錯誤:

#12 0.725 npm ERR! code ENOENT
#12 0.726 npm ERR! syscall open
#12 0.728 npm ERR! path /usr/src/app/package.json
#12 0.729 npm ERR! errno -2
#12 0.734 npm ERR! enoent ENOENT: no such file or directory, open '/usr/src/app/package.json'

I think that the problem is in my Dockerfile and COPY package*.json./ , is a chance that my Dockerfile can not see package.json ?

謝謝你的幫助!

從您的文件系統結構中,托管Dockerfile的目錄是構建上下文 -> microservice-one

當您執行docker build...時,構建上下文及其所有內容都會被打包並發送到 docker 守護程序,然后它會嘗試構建您的容器。 那時只能訪問構建上下文,外部沒有。 https://docs.docker.com/engine/reference/commandline/build/#build-with-path

因此,除非您移動/復制文件,否則它將保持不可見。

當您的上下文是./apps/microservice-one時,Dockerfile 只能從該目錄及其下的目錄復制文件。

您的 Dockerfile 被編寫為假設上下文是當前目錄,因此如果您更改 docker-compose 文件中的上下文和 dockerfile 值,它應該可以工作。

services:
  microservice-one:
    container_name: microservice-one
    build:
      context: .
      dockerfile: ./apps/microservice-one/Dockerfile
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - 3000:3000
    expose: 
      - '3000'
    command: npm run start

暫無
暫無

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

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