gpt4 book ai didi

Docker compose 如何将路径从一个容器挂载到另一个容器?

转载 作者:IT老高 更新时间:2023-10-28 12:37:06 25 4
gpt4 key购买 nike

我有 nignx 容器 和一个 asset 容器,我的所有 Assets 都是通过 grunt 或其他一些工具构建的。

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

  • 我们该怎么做呢?我不记得了,但我认为有一个选项可以让我们与另一个容器共享一个容器的路径。

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

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

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

最佳答案

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

完全在 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

关于Docker compose 如何将路径从一个容器挂载到另一个容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43559619/

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