docker - 容器之间是否共享 docker 环境变量?
问题描述
新手来了 我创建了一个空解决方案,添加了 WebApplication1 和 WebApplication2。然后我添加了 docker 支持(Docker for Windows、Windows Containers)。撰写文件如下所示:
version: '3.4'
services:
webapplication1:
image: compositeapp
build:
context: .\WebApplication1
dockerfile: Dockerfile
webapplication2:
image: compositeapp
build:
context: .\WebApplication2
dockerfile: Dockerfile
所以两个容器都在一个图像中。Webapplication1 dockerfile 的 ENV LICENSE=abc123 和 webapplication2 dockerfile 的 ENV LICENSE=abc456。
构建并启动容器后,我使用 exec -it powershell 远程访问 2 个容器并执行 get-item env:license。两个容器返回 456。
作为一个新手,我期待一台机器返回 abc123 和另一台 abc456。我只是将环境名称编为许可证,但是如果他们需要每个容器的环境变量该怎么办?
解决方案
我猜您注意到的问题是您为两个服务指定了相同的图像名称这一事实,这意味着它们将具有与ENV
latest-compiled 中定义的相同的变量Dockerfile
。
你可以试试这个吗?
版本:'3.4' 服务: 网络应用程序1: 图片:compositeapp1 建造: 上下文:.\WebApplication1 码头文件:码头文件 网络应用程序2: 图片:compositeapp2 建造: 上下文:.\WebApplication2 码头文件:码头文件
无论如何,即使这有效,我假设您的两个Dockerfile
几乎相同(?),在这种情况下,我宁愿建议使用单个Dockerfile
和单个图像标签,但通过使用一些环境部分自定义两个服务的环境你的docker-compose.yml
(或一些env_file部分,以及一些外部.env
文件......)。
例如,你可能想写这样的东西:
版本:'3.4' 服务: 网络应用程序1: 图片:compositeapp 建造: 上下文:.\WebApplication 码头文件:码头文件 环境: - 许可证=abc123 网络应用程序2: 图片:compositeapp 环境: - 许可证=abc456
(不要忘记从 中删除该ENV LICENSE=...
行Dockerfile
)
推荐阅读
- ms-access - 查看和显示 SetTempVar 结果时出现问题
- python - 将熊猫列“一年中的某一天”转换为日期时间(%m-%d)?
- java - Kura 如何在bundle之间进行通信?
- twilio - 在 Asterisk PBX 上获取拨出呼叫的 sip 标头
- javascript - 移动菜单:点击父链接显示子菜单,但也直接进入父页面
- python - 最大不适用于 for 循环内的系列/列表
- ios - 将图像添加到 CAShapeLayer
- ruby-on-rails - Sidekiq 仅在开发机器上运行缓慢
- python - Python程序问题打印偶数
- javascript - 将事件传递给 React 中的嵌套函数并且没有获得外部事件值