[英]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.env
和stage.env
,其中描述了SERVICE_VERSION
和PROFILE
。
有什么方法可以在運行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.