Docker Compose 引用环境变量 - sparkdev - 博客园
之前用 docker-compose 都不知道可以抓環境變數
甚至 .env 也可以抓到
某天看到這個方法
今天來整理一下,不確定是哪個版本才有這個功能
Bash 環境變數
1 | export IMAGETAG=httpd |
windows posershell 不知道要怎麼抓
但先不研究
1 | version: '3' |
預設環境變數
重新開新的bash
1 | version: '3' |
環境變數傳給容器
1 | web: |
同等於
docker run -e DEBUG=1 ubuntu bash
1 | docker run -e DEBUG=1 ubuntu bash |
沒有設定 1 會為 null
請參考如下
1 | web: |
再 Linux 設定 DEBUG 環境變數為 1
.env
參考: Environment variables in Compose | Docker Documentation1
2
3
4
5
6
7
8
9
10
11
12
13
14$ cat .env
TAG=v1.5
$ cat docker-compose.yml
version: '3'
services:
web:
image: "webapp:${TAG}"
$ docker-compose config
version: '3'
services:
web:
image: 'webapp:v1.5'
設定檔案為容器多個環境變數
1 | $ cat .env |
最下面同等於
1 | docker run --env-file=./config/.env.dev |
環境變數使用順序
- Compose file
- Shell environment variables
- Environment file
- Dockerfile
- Variable is not defined
首先,在 docker-compose.yml 文件中直接設置的值優先級是最高的。
然後是在當前 shell 中 export 的環境變量值。
接下來是在環境變量文件中定義的值。
再接下來是在 Dockerfile 中定義的值。
最後還沒有找到相關的環境變量就認為該環境變量沒有被定義。
依照環境變數建置測試/正式環境
參考: Docker Compose 引用環境變量 - sparkdev - 博客園
test.sh1
2
3
4
5
6!/bin/bash
define env var default value.
export IMAGETAG=web:v1
export APPNAME=HelloWorld
export AUTHOR=Nick Li
export VERSION=1.0
prod.sh1
2
3
4
5
6!/bin/bash
define env var default value.
export IMAGETAG=webpord:v1
export APPNAME=HelloWorldProd
export AUTHOR=Nick Li
export VERSION=1.0LTS
可依照 shell 環境變數建立不同環境
還算滿方便的方法
1 | source test.sh |