容器之间是否共享docker环境变量?

时间:2018-06-25 20:45:53

标签: docker dockerfile docker-for-windows

新手在这里。我创建了一个空解决方案,添加了WebApplication1和WebApplication2。然后,我添加了docker支持(适用于Windows的Docker,Windows容器)。撰写文件如下所示:

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-env env:license。两个容器都返回456。

作为新手,我期望一台计算机返回abc123,而另一台返回456456。我只是将环境名称伪造为许可证,但是如果他们需要每个容器环境变量,该怎么办?

1 个答案:

答案 0 :(得分:0)

我猜您注意到这是因为您为两个服务指定了相同的映像名称,这意味着它们将具有与最新编译的ENV中定义的相同的Dockerfile变量。

您可以试试吗?

version: '3.4'

services:
  webapplication1:
    image: compositeapp1
    build:
      context: .\WebApplication1
      dockerfile: Dockerfile

  webapplication2:
    image: compositeapp2
    build:
      context: .\WebApplication2
      dockerfile: Dockerfile

无论如何,即使这可行,我也假设您的两个Dockerfile几乎相同(?),在这种情况下,我宁愿建议使用单个Dockerfile和单个图像标签,但可以通过使用{{1}中的某个environment部分(或某个env_file部分以及一些外部docker-compose.yml文件...)来定制两种服务的环境。

例如,您可能需要编写如下内容:

version: '3.4'

services:
  webapplication1:
    image: compositeapp
    build:
      context: .\WebApplication
      dockerfile: Dockerfile
    environment:
      - LICENSE=abc123
  webapplication2:
    image: compositeapp
    environment:
      - LICENSE=abc456

(不要忘记从.env删除ENV LICENSE=...行)