【问题标题】:Docker compose how to mount path from one to another container?Docker compose 如何将路径从一个容器挂载到另一个容器?
【发布时间】:2017-09-19 10:54:25
【问题描述】:

我有一个 nignx container 和一个 asset container,它们的所有资产都是通过 grunt 或其他一些工具构建的。

现在在 docker compose 文件中,我想将 asset container's 的文件夹路径挂载到 nginx container 以便 nginx 可以提供这些文件。

  • 我们怎样才能做到这一点?我不记得了,但我认为有一个选项可以让我们与另一个容器共享一个容器的路径。

  • 假设如果我将 nginx 扩展到 2 个容器,那么该挂载是否适用于所有 nginx 实例?

  • 如果我扩大asset container 那么会发生什么?

  • 我也想将它安装到我的主机上,以便轻松完成开发。

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    您要做的是使用一个卷,然后将该卷挂载到您希望它出现的任何容器中。

    完全在 Docker 中

    您可以完全在 Docker 内部完成此操作。

    这是一个示例(精简版 - 当然,您的真实文件中的内容远不止这些)。

    version: '3'
    services:
      nginx:
        volumes:
          - asset-volume:/var/lib/assets
      asset:
        volumes:
          - asset-volume:/var/lib/assets
    
    volumes:
      asset-volume:
    

    底部是定义的单个卷,名为“asset-volume”。

    然后在您的每个服务中,您告诉 Docker 将该卷挂载到特定路径。我展示了容器内的示例路径,只需将它们调整为您希望它们在容器中的任何路径。

    卷是不属于任何特定容器的独立实体。它只是安装到它们中的每一个中,并且是共享的。如果一个容器修改了内容,那么他​​们都会看到这些变化。

    请注意,如果您希望只有一个可以进行更改,您可以在某些服务中将卷挂载为只读,方法是在卷字符串的末尾添加:ro

    services:
      servicename:
        volumes:
          - asset-volume:/var/lib/assets:ro
    

    使用主机目录

    或者,您可以使用主机上的目录并将其挂载到容器中。这样做的好处是您可以使用 Docker 之外的工具(例如 GUI 文本编辑器和其他工具)直接处理文件。

    都是一样的,只是你没有在Docker中定义一个volume,而是挂载了外部目录。

    version: '3'
    services:
      nginx:
        volumes:
          - ./assets:/var/lib/assets
      asset:
        volumes:
          - ./assets:/var/lib/assets
    

    在本例中,本地目录“assets”使用相对路径 ./assets 挂载到两个容器中。

    根据环境使用两者

    您还可以针对不同的开发和生产环境进行设置。将所有内容放入 docker-compose.yml 除了 卷挂载。然后再制作两个文件。

    • docker-compose.dev.yml
    • docker-compose.prod.yml

    在这些文件中只放置定义卷挂载的最小配置。我们将把它与 docker-compose.yml 混合以获得最终配置。

    然后使用它。它将使用来自 docker-compose.yml 的配置,并使用第二个文件中的任何内容作为替代或补充配置。

    docker-compose -f docker-compose.yml \
        -f docker-compose.dev.yml \
        up -d
    

    对于生产,只需使用 prod 文件而不是 dev 文件。

    这里的想法是将大部分配置保留在 docker-compose.yml 中,并且只保留替代文件中的最小差异集。

    例子:

    docker-compose.prod.yml

    version: '3'
    services:
      nginx:
        volumes:
          - asset-volume:/var/lib/assets
    

    docker-compose.dev.yml

    version: '3'
    services:
      nginx:
        volumes:
          - ./assets:/var/lib/assets
    

    【讨论】:

    • 能否请您也告诉我如何将它安装到主机以及用于开发...意味着如何将资产卷与主机一起安装,以便两者可以同步。
    • @dev.mraj 查看更新的答案。我添加了一个使用外部目录而不是 Docker 卷的示例。
    • 我不能同时使用两个
    • 表示与主机的卷同步(用于开发环境)
    • @dev.mraj 我更新了我的答案。现在它展示了如何使用覆盖组合文件来使您的配置适应多种环境(如 dev 和 prod)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2017-09-09
    • 1970-01-01
    • 2020-08-02
    • 2021-03-04
    • 2021-12-08
    相关资源
    最近更新 更多