gpt4 book ai didi

docker 组成。同一容器上另一个卷内的卷。它是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 17:52:17 40 4
gpt4 key购买 nike

我正在尝试创建一个相对简单的设置来开发和测试 npm 包。事实上,一个问题是,在将代码卷安装到容器后,它会替换 node_modules。

我尝试了很多通常合乎逻辑的东西,主要是为了将 node_modules 移动到另一个位置,然后在配置文件中引用它。它有效,但解决方案很丑陋。此外,全局安装 webpack 也不是一个好习惯,但我的解决方案需要它。

然而,一段时间后我发现了这个看起来很优雅的解决方案,正是我所需要的,但它也有一个问题。我完全不明白,它是如何工作的。

那是我对一切运作方式的看法。

  • Docker 根据容器路径重新排序卷安装
  • Docker首先挂载子目录卷
  • Docker 挂载父目录卷,但由于机制不明,它不会覆盖子目录卷...
  • ???
  • 利润。 node_modules 目录就位,webpack 运行完美。

  • 所以,我真的很想了解它是如何实现所有这些黑魔法的。因为没有这些知识,我觉得我错过了一些重要的东西。
    那么,伙计们,它是如何工作的?
    提前致谢。
    services:
    react-generic-form:
    image: react-generic-form:package
    container_name: react-generic-form-package
    build:
    dockerfile: dev.Dockerfile
    context: ./package
    volumes:
    - "./package:/package"
    - "/package/node_modules"

    最佳答案

    Docker 守护进程在创建容器时会对所有挂载点进行排序以避免阴影。 (在非 Windows 上,这发生在 (*github.com/docker/docker/daemon.Daemon).setupMounts 中。)因此,在您的示例中:

  • Docker 守护进程看到 /package/package/node_modules包含存储在容器文件空间之外的数据。
  • 它将这些从最短到最长排序。
  • 它安装 /package ,作为指定主机目录的绑定(bind)挂载。 (首先,因为它是一个较短的路径名。)
  • 它安装 /package/node_modules ,隐藏上一个挂载中的等效目录,可能作为绑定(bind)挂载到 /var/lib/docker/volumes 中某处具有长十六进制标识符名称的目录.

  • 您可以使用 docker-compose.yml 进行更多实验。像这样的文件
    version: '3'
    services:
    touch:
    image: busybox
    volumes:
    - ./b:/a/b
    - ./a:/a
    command: touch /a/b/c

    请注意,无论您下哪个订单, volumes:在,你会得到一个空目录 ./a/b (成为容器内的挂载点),加上一个空文件 ./b/c ( touch 命令的结果)。

    还要注意这里的声明 node_modules目录包含数据,应该跨容器调用持久化,并且具有独立于容器或其基本镜像的生命周期。更改图像并重新运行 docker-compose up不会影响此卷的内容。

    关于 docker 组成。同一容器上另一个卷内的卷。它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55328893/

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