首页 > 解决方案 > 容器之间是否共享 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。我只是将环境名称编为许可证,但是如果他们需要每个容器的环境变量该怎么办?

标签: dockerdockerfiledocker-for-windows

解决方案


我猜您注意到的问题是您为两个服务指定了相同的图像名称这一事实,这意味着它们将具有与ENVlatest-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


推荐阅读