簡體   English   中英

Docker-compose 從 env 文件中指定標簽

[英]Docker-compose specify tags from env file

我有 docker-compose.yml 如下所示:

version: '2'
services:

    micro-service:
        image: some/micro-service:${SERVICE_VERSION}
        env_file:
            - ../all-variables/${PROFILE}/micro_service.env
        ports:
            - "8085:8085"

我有兩個文件: dev.envstage.env ,其中描述了SERVICE_VERSIONPROFILE

有什么方法可以在運行docker-compose up時指定具體文件默認情況下.env -compose 從當前目錄中獲取.env文件。

有沒有辦法覆蓋它或其他解決方法?

正如評論中的答案中提到的那樣,沒有辦法做到這一點,因為它被直接編碼到源代碼中以使用.env

但是,有幾種方法可以獲得類似的行為。

第一種方法與docker-compose本機一起使用,即使用 docker-compose覆蓋文件。

因此,在您的情況下,您可以擁有這樣的基本docker-compose.yml文件:

version: '2'
services:
  micro-service:
    image: some/micro-service:1.0.0
    ports:
      - "8085:8085"

然后你可以定義一個docker-compose-dev.yml文件:

version: '2'
services:
  micro-service:
    image: some/micro-service:dev
    env_file:
      - ../all-variables/dev/micro_service.env

然后你可以運行以下命令

$ docker-compose up -f docker-compose.yml -f docker-compose-dev.yml up

如果您這樣做, docker-compose-dev.yml的值將覆蓋docker-compose.yml 因此,它不會使用some/micro-service:1.0.0圖像,而是使用docker-compose-dev.yml定義的圖像。

第二種方法是使用docker-app 這是 Docker 團隊的一個新的實驗性實用程序。

基本上,您將創建一個dockerapp文件:

version: 0.0.1
name: app

---
version: '2'
services: 
  micro-service:
    image: some/micro-service:${SERVICE_VERSION}
      env_file:
        - ../all-variables/${PROFILE}/micro_service.env
      ports:
        - "8085:8085"
---
SERVICE_VERSION: latest
PROFILE: default

然后,如果您將.env文件轉換為.yml ,則使用docker-app使用正確的變量呈現撰寫文件。

docker-app render -f dev.yml | docker-compose -f - up

希望這是有幫助的,我在使用 docker-compose 處理多個環境時遇到了類似的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM