【发布时间】:2023-01-13 00:39:15
【问题描述】:
我不知道还有什么办法可以解决这个问题。在运行我的 docker 容器构建后,我一直看到这个错误。当我尝试从我的 Web 浏览器访问该应用程序时,出现以下错误:
Error: ENOENT: no such file or directory, stat '/app/server/public/index.html'
很明显有些东西没有被复制。我仍在学习这个 docker 容器并且正在学习教程。我已经与我的教程代码交叉检查,它们完全相同。他的代码有效,但我的代码无效。
这是我的 dockerfile 代码:
FROM node:lts-alpine
WORKDIR /app
COPY package*.json ./
COPY client/package*.json client/
RUN npm run install-client --only=production
COPY server/package*.json server/
RUN npm run install-server --only=production
COPY client/ client/
RUN npm run build --prefix client
COPY server/ server/
USER node
CMD [ "npm", "start", "--prefix", "server" ]
EXPOSE 5000
我的 reactjs package.json 构建脚本:
"build": "set BUILD_PATH=../server/public && react-scripts build",
我在我的 nasa 项目目录中同时运行了 docker build 和 run 代码
Desktop\Node js master class\NASA>
在 docker build 之后,似乎没有任何内容被复制到 /app 中。我不知道我到底需要做什么来解决这个问题。这是我尝试通过网络浏览器访问应用程序时再次遇到的错误:
Error: ENOENT: no such file or directory, stat '/app/server/public/index.html'
【问题讨论】:
-
你是如何启动容器的?
docker run命令或docker-compose.yml是什么样子的? (是否有docker run -v选项或 Composevolumes:覆盖图像的/app目录?) -
我使用以下代码运行容器:docker run -it -p 5000:5000 kings19/nasa-project
-
你知道可能是什么问题吗?这个错误现在已经出现 3 天了,它变得令人沮丧。我已经浏览了几乎整个谷歌页面来寻找解决方案
-
它看起来像你
RUN npm run build --prefix client,但不要对server子目录做同样的事情;你也需要这样做吗?您也可以尝试docker run --rm -it kings19/nasa-project sh在基于图像的新容器中获取交互式调试 shell,以查看那里有什么,没有什么。 -
在我进一步搜索以了解如何检查子列表后,您给我的代码行帮助我查看了容器内的内容。我一直怀疑问题出在我运行 npm run build --prefix client 时。这会在我的客户端调用 npm 包脚本,它会做两件事。首先,它在服务器端创建一个名为 public 的文件夹路径,并在其中运行客户端构建。这使得客户端构建文件在服务器/公共路径中可用。不知何故,dockerfile 没有执行此任务。它不在服务器/公共文件夹中构建反应构建文件。我需要想办法。