新手在这里。我创建了一个空解决方案,添加了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。我只是将环境名称伪造为许可证,但是如果他们需要每个容器环境变量,该怎么办?
答案 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=...
行)