Dockerfile客户端和服务器构建

问题描述 投票:0回答:1

关于Dockerfile的快速问题。

我有一个文件夹结构是这样的。

docker-compose.yml
  client
  src
  package.json
  Dockerfile
  ...etc

客户端文件夹包含reactjs应用,根目录是带有typecript的nodejs服务器。我创建的Dockerfile是这样的。

FROM node

RUN mkdir -p /server/node_modules && chown -R node:node /server
WORKDIR /server
USER node
COPY package*.json ./
RUN npm install

COPY --chown=node:node . ./dist

RUN npm run build-application

COPY /src/views ./dist/src/views
COPY /src/public ./dist/src/public

EXPOSE 4000
CMD node dist/src/index.js

npm run build-application命令执行客户端构建(npm run build --prefix .client)和服务器(rimraf dist && mkdir dist && tsc -p .)。问题是Docker找不到客户端文件夹错误。

npm ERR! enoent ENOENT: no such file or directory, open '/server/client/package.json'
npm ERR! enoent This is related to npm not being able to find a file.

谁能解释一下原因?以及如何解决这个问题?

Docker编译文件。

...
server:
    build:
      context: ./server
      dockerfile: Dockerfile
    image: mazosios-pedutes-server
    container_name: mazosios-pedutes-server
    restart: unless-stopped
    networks:
      - app-network
    env_file:
      - ./server/.env
    ports:
      - "4000:4000"
docker docker-compose dockerfile
1个回答
0
投票

由于错误是说没有 client/package.json/server 我的问题是下面的问题。

你的 ./client 目录中的 /server?

Dockerfile WORKDIR指令使得后面的所有命令都在你传递给WORKDIR作为参数的目录下执行。

我想如果你在WORKDIR中加入 RUN tree -d (只列出嵌套目录)后的最后一个 COPY 指令,你将能够看到你的。client 目录的位置,你将能够固定它的路径。

© www.soinside.com 2019 - 2024. All rights reserved.