Dockerfile客户端和服务器构建

Dockerfile客户端和服务器构建,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,关于Dockerfile的快速问题 我有这样一个文件夹结构: docker-compose.yml client src package.json Dockerfile ...etc FROM node RUN mkdir -p /server/node_modules && chown -R node:node /server WORKDIR /server USER node COPY package*.json ./ RUN npm install

关于Dockerfile的快速问题

我有这样一个文件夹结构:

docker-compose.yml
  client
  src
  package.json
  Dockerfile
  ...etc
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
客户端文件夹包含reactjs应用程序,根目录是带有typescript的nodejs服务器。我创建了Dockerfile,如下所示:

docker-compose.yml
  client
  src
  package.json
  Dockerfile
  ...etc
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运行构建应用程序命令执行客户端构建(npm运行构建——前缀./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"

由于错误是说
/server
中没有
客户机/package.json
,因此我的问题如下

您的
/client
目录是否位于
/server

Dockerfile WORKDIR指令使其后面的所有命令在作为参数传递给WORKDIR的目录中执行


我猜如果您在最后一个
复制
指令之后添加
运行树-d
(仅列出嵌套目录),您将能够看到您的
客户端
目录所在的位置,并能够修复指向它的路径。

因为错误是说
/server
中没有
客户端/包.json
,我的问题如下

您的
/client
目录是否位于
/server

Dockerfile WORKDIR指令使其后面的所有命令在作为参数传递给WORKDIR的目录中执行


我猜如果您在最后一个
复制
指令之后添加
运行树-d
(仅列出嵌套目录),您将能够看到您的<代码>客户端>代码>目录,您将能够修复它的路径。

在DOCKFILE中间的拷贝< /C>命令将所有目录中的内容放在<代码> DIST子目录中;所以你有<代码> /Server /包。JSON<代码>但是<代码> /Serv/Dist/Client//<代码> >在DOCKFILE中间的<代码>拷贝/代码>命令将主机目录中的所有内容放在<代码> DIST子目录中;所以你有
/server/package.json
但是
/server/dist/client/…