Docker如何将路径从一个容器装载到另一个容器?
我有Docker如何将路径从一个容器装载到另一个容器?,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我有nignx容器和一个asset容器,它们让我的所有资产都从grunt或其他工具构建 现在在docker compose文件中,我想将资产容器的文件夹路径装载到nginx容器中,以便nginx可以为这些文件提供服务 我们怎么能做到呢?我不记得了,但我认为有一种选择,我们可以共享一个容器和另一个容器的路径 假设我将nginx扩展到2个容器,那么挂载是否适用于所有nginx实例 如果我放大资产容器,会发生什么 我还想挂载与我的主机,以便开发可以很容易地完成 您要做的是使用一个卷,然后将该卷装入您
nignx容器
和一个asset容器
,它们让我的所有资产都从grunt或其他工具构建
现在在docker compose文件中,我想将资产容器的
文件夹路径装载到nginx容器
中,以便nginx可以为这些文件提供服务
- 我们怎么能做到呢?我不记得了,但我认为有一种选择,我们可以共享一个容器和另一个容器的路径
- 假设我将nginx扩展到2个容器,那么挂载是否适用于所有nginx实例
- 如果我放大
,会发生什么资产容器
- 我还想挂载与我的主机,以便开发可以很容易地完成
版本:“3”
服务:
nginx:
卷数:
-资产量:/var/lib/assets
资产:
卷数:
-资产量:/var/lib/assets
卷数:
资产量:
底部是定义的单个卷,名为“资产卷”
然后在您的每个服务中,您告诉Docker在特定路径上装载该卷。我展示了容器中的示例路径,只需将它们调整为您希望它们位于容器中的任何路径
卷是不属于任何特定容器的独立实体。它只是被安装到它们中的每一个,并被共享。如果一个容器修改了内容,那么它们都会看到更改
请注意,如果您希望只有一个卷可以进行更改,则可以在某些服务中始终以只读方式装载卷,方法是在卷字符串的末尾添加:ro
服务:
服务名称:
卷数:
-资产量:/var/lib/assets:ro
使用主机目录
或者,您可以使用主机上的目录并将其装载到容器中。这样做的好处是,您可以使用Docker之外的工具(例如GUI文本编辑器和其他工具)直接处理文件
这是相同的,只是您没有在Docker中定义卷,而是装载外部目录
版本:“3”
服务:
nginx:
卷数:
-/资产:/var/lib/assets
资产:
卷数:
-/资产:/var/lib/assets
在本例中,使用相对路径/assets
将本地目录“assets”装入两个容器中
根据环境使用两者
您还可以为不同的开发和生产环境设置它。将所有内容放入docker-compose.yml中,但卷装入除外。然后再制作两个文件
- docker-compose.dev.yml
- docker-compose.prod.yml
docker-compose-f docker-compose.yml\
-f docker-compose.dev.yml\
up-d
对于生产,只需使用prod文件而不是dev文件
这里的想法是将大部分配置保存在docker-compose.yml中,在备选文件中只保留最小的差异集
例如:
docker compose.prod.yml
版本:“3”
服务:
nginx:
卷数:
-资产量:/var/lib/assets
docker compose.dev.yml
版本:“3”
服务:
nginx:
卷数:
-/资产:/var/lib/assets
您是否可以让我知道如何将其装载到主机上以进行开发…意味着如何将资产卷装载到主机上,以便两者都可以同步。@dev.mraj请参阅更新的答案。我添加了一个使用外部目录而不是Docker卷的示例。我不能同时使用这两个目录吗?Means volume sync with host(对于dev env)@dev.mraj我更新了我的答案。现在,它展示了如何使用overlay compose文件使您的配置适应多个环境(如dev和prod)。