gpt4 book ai didi

reactjs - Docker:绑定(bind)挂载没有像我预期的那样工作

转载 作者:行者123 更新时间:2023-12-02 21:12:36 25 4
gpt4 key购买 nike

大多数时候,我将 Docker 与卷一起使用。但现在我第一次尝试绑定(bind)安装,但它们没有按我预期的那样工作。我可能遗漏了一些东西,或者可能不完全理解他们的工作方式。

让我们举这个例子。我有一个使用 create-react-app 创建的 React 应用程序它将与基于 MySQL 数据库的 Rails 后端一起运行。

我的目录结构是:

App
├── docker
│   ├── api
│   │   └── Dockerfile
│   └── fe
│   ├── Dockerfile
│   ├── package.json
│   ├── package-lock.json
│   ├── public
│   ├── README.md
│   └── src
├── docker-compose.yml

我首先创建 docker-compose.yml像这样的文件:
version: "3.7"

services:

web:
build: ./docker/fe/.
ports: ["80:3000"]
volumes:
- type: bind
source: "./docker/fe"
target: "/app"

如您所见,我正在映射目录 ./docker/fe ,React 前端所在的位置,到 /app .

内部 ./docker/fe是 Dockerfile:
FROM node:8

WORKDIR /app

RUN npm install

CMD ["npm","start"]

我期待这会起作用,因为我的应用程序文件都在 /app 中, 映射到 ./docker/fe .至少我认为他们会是!但是当我运行 docker-compose up --build命令行中的命令我得到一个构建错误,因为它说没有 package.json /app 中的文件目录。

另一方面,当我使用 Dockerfile 的另一个版本时
FROM node:8

WORKDIR /app

ADD package.json .

ADD package-lock.json .

RUN npm install

ADD . .

CMD ["npm","start"]

这个问题不会发生。它将找到 package.json文件并正确构建应用程序。但它不会运行!

事实上,它会说它找不到 React 脚本。这并不奇怪,因为当它完成时没有 node_modules ./docker/fe 内的目录正如运行 npm install 后所预期的那样.

我很困惑。
  • 我是否缺少有关绑定(bind)安装的信息?
  • 为什么我需要添加package.json如果该目录与该文件所在的主机目录相关联,则到 WORKDIR?
  • 为什么我没有 node_modules ./docker/fe 内的目录在 npm install 之后?
  • 最佳答案

    仅当镜像为 时才挂载 Docker 卷运行 ,而不是在 期间构建 阶段。

    将这些重新添加到您的 Dockerfile 中:

    ADD package.json .

    ADD package-lock.json .

    和/或:
    ADD . .

    关于reactjs - Docker:绑定(bind)挂载没有像我预期的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53685311/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com