- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有 nignx 容器
和一个 asset 容器
,我的所有 Assets 都是通过 grunt 或其他一些工具构建的。
现在在 docker compose 文件中,我想将 asset container's
的文件夹路径挂载到 nginx container
中,以便 nginx 可以提供这些文件。
我们该怎么做呢?我不记得了,但我认为有一个选项可以让我们与另一个容器共享一个容器的路径。
假设如果我将 nginx 扩展到 2 个容器,那么该挂载是否适用于所有 nginx 实例?
如果我扩大 asset container
那么会发生什么?
我也想将它安装到我的主机上,以便轻松完成开发。
最佳答案
您要做的是使用一个卷,然后将该卷挂载到您希望它出现的任何容器中。
您可以完全在 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.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/
我是一名优秀的程序员,十分优秀!