关于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"
由于错误是说没有 client/package.json
在 /server
我的问题是下面的问题。
你的 ./client
目录中的 /server
?
Dockerfile WORKDIR指令使得后面的所有命令都在你传递给WORKDIR作为参数的目录下执行。
我想如果你在WORKDIR中加入 RUN tree -d
(只列出嵌套目录)后的最后一个 COPY
指令,你将能够看到你的。client
目录的位置,你将能够固定它的路径。