在docker-compose中使用环境变量

和Makefile一样,docker compose中也是可以使用环境变量的,也是使用${var}这样的方式来使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
version: '3'
services:
app:
build:
context: ./docker/app
dockerfile: Dockerfile
image: shippingdocker/app:latest
networks:
- appnet
volumes:
- .:/var/www/html
ports:
- ${APP_PORT}:80
working_dir: /var/www/html
cache:
image: redis:alpine
networks:
- appnet
volumes:
- cachedata:/data
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
ports:
- ${DB_PORT}:3306
networks:
- appnet
volumes:
- dbdata:/var/lib/mysql
node:
build:
context: ./docker/node
dockerfile: Dockerfile
image: shippingdocker/node:latest
networks:
- appnet
volumes:
- .:/opt
working_dir: /opt
command: echo hi
networks:
appnet:
driver: bridge
volumes:
dbdata:
driver: local
cachedata:
driver: local

这里面好几个端口都是使用的环境变了来指定的,我们可以在启动docker compose的时候,传递这个环境变量

1
2
export APP_PORT=8080
docker-compose up -d

或者

1
DB_PORT=3306 docker-compose up -d

.env

docker-compose同时也支持dotfile来管理环境变量,在docker compose的同级别目录下面放置.env文件,docker-compose中的变量会被自动替换。