Dockerfile客户端和服务器构建
关于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
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/…
。