【问题标题】:Docker npm install with volumes mapping带有卷映射的 Docker npm install
【发布时间】:2021-08-09 09:42:49
【问题描述】:

我正在关注 docker 和 docker compose 的教程。虽然Dockerfile中有npm install命令(如下),但有一种情况需要导师手动运行。

COPY package*.json .
RUN npm install

因为他将项目当前目录通过卷映射到容器如下:(这就像项目通过将源代码映射到主机目录在容器中运行)

api:
    build: ./backend
    ports:
      - 3001:3000
    environment:
      DB_URL: mongodb://db/vidly
    volumes:
      - ./backend:/app

所以 docker 文件中的 npm install 命令没有任何意义。所以他直接在项目的根目录下运行这个命令。

所以,另一个开发人员也必须运行npm install,(或者如果我添加一个新包,我也应该这样做)这似乎对开发人员不太友好。因为docker的目的不是自己做指令。所以docker-compose up 应该做所有事情。任何有关此问题的想法将不胜感激。

【问题讨论】:

  • "...有一种情况,导师必须手动运行该命令。" - 究竟是什么情况?我想象容器是一个开发容器,否则我们不会挂载,而是将代码复制到容器中。
  • 是的,我说的是开发时间。关于这种情况,我后面描述过:因为他在映射项目...
  • 那是……含糊不清。我希望代码以npm start 或类似名称开头,并在检测到更改时自动重新加载(通过npm,这就是我们首先希望卷安装的原因)。我认为我们没有理由必须重建。但话又说回来,我不是 javascript 生态系统的专家,我在这方面的知识非常有限。
  • 如果没有 docker,你将如何处理这个开发?这是针对测试/生产问题的开发与构建。如果您在 docker 容器中为您的开发安装本地文件夹,并在开发时添加/更改依赖项,您必须启动一些命令来刷新您的开发树。如果没有 docker,您可以在自己的本地环境或本地/远程(虚拟)机器中执行此操作。使用 docker 和绑定挂载,您可以在运行的容器中执行此操作(并且大多数 IDE 都支持 docker,并且如果您有人不习惯命令行,则可以从他们的 GUI 中执行此操作)。
  • @Zeitounator 这是有道理的。谢谢

标签: docker npm docker-compose dockerfile


【解决方案1】:

我同意@zeitounator 的观点,他对您的情况和使用添加了非常明智的评论。

但是,如果您确实想解决在代码中运行卷安装的容器的原始问题,并让它运行开发服务器,那么您可以将 npm 命令从 COPY 指令移动到 @ 987654323@,甚至在包含 npm 调用的容器中添加入口脚本。

这样您就可以使用卷挂载运行容器,而启动过程(npm installnpm serve dev 等)将在运行时发生,而不是构建时间

Vahid,正如您提到的那样,最好的解决方案是使用一个智能 Dockerfile,该文件利用合理的构建缓存,允许使用一个命令构建和运行应用程序(无需外部输入)。也许你和你的导师可以谈谈这些差异并达成协议

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-15
    • 2020-09-11
    • 2017-09-18
    • 1970-01-01
    • 2020-10-14
    • 2017-12-09
    • 1970-01-01
    • 2021-03-24
    相关资源
    最近更新 更多