1. 在yml文件中定义变量
添加
environment:
字段,后边跟数组格式 " key: val "
# docker-compose.yml
version: '3'
services:
image: 'docker.io/mysql:latest'
environment:
MYSQL_ROOT_PASSWORD: "liubei@2021"
MYSQL_USER: 'liubei'
MYSQL_PASSWORD: 'liubei@2021'
MYSQL_DATABASE: 'liubeidb'
2. 在.env
文件中的变量
2.1 容器中引用为环境变量
.env 文件
TZ=Asia/Shanghai
MYSQL_ROOT_PASSWORD=liubei@2021
docker-compose.yml文件
添加 environment:
字段,后边跟数组格式 " - xxxx "
version: '3'
services:
mysql:
image: 'docker.io/mysql:latest'
restart: always
container_name: mysql
ports:
- '13306:3306'
environment:
- MYSQL_ROOT_PASSWORD
[root@n9e-v5 mysql]# docker-compose config
services:
mysql:
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: liubei@2021
TZ: Asia/Shanghai
image: docker.io/mysql:latest
ports:
- 13306:3306/tcp
restart: always
version: '3.0'
2.2 yml文件启动容器时的变量
说明:比如映射出哪个端口,容器的名字等等。这些并不是容器中的变量,我们也可以直接在.env
文件中定义。
.env文件
TZ=Asia/Shanghai
MYSQL_ROOT_PASSWORD=liubei@2021
PORT=13306
docker-compose.yml文件
version: '3'
services:
mysql:
image: 'docker.io/mysql:latest'
restart: always
container_name: mysql
ports:
- '${PORT}:3306'
environment:
- MYSQL_ROOT_PASSWORD
[root@n9e-v5 mysql]# docker-compose config
services:
mysql:
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: liubei@2021
TZ: Asia/Shanghai
image: docker.io/mysql:latest
ports:
- 13306:3306/tcp
restart: always
version: '3.0'
3. 引用其他文件的变量
创建 test.env 文件
docker-compose.yml 文件
添加 env_file:
字段
version: '3'
services:
mysql:
image: 'docker.io/mysql:latest'
restart: always
container_name: mysql
ports:
- '13306:3306'
environment:
ABC: abc_abc
env_file:
- ./test.env
services:
mysql:
container_name: mysql
environment:
ABC: abc_abc
MYSQL_ROOT_PASSWORD: liubei@2021
PORT: '13306'
TZ: Asia/Shanghai
image: docker.io/mysql:latest
ports:
- 13306:3306/tcp
restart: always
version: '3.0'
4. 引用主机变量
environment:
XI_SHU: ${MY_NAME:-liubei}
容器中变量key为:XI_SHU
,它的值会读取宿主机key为MY_NAME
的值,缺省默认使用liubei
yml文件
version: "3.1"
services:
mysql:
image: harbocto.boe.com.cn/public/mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 'liubei@2021'
TZ: Asia/Shanghai
MYSQL_USER: ${MY_NAME:-liubei}
MYSQL_PASSWORD: 'liubei@2021'
MYSQL_DATABASE: ${MY_NAME:-liubei}db
restart: always
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
当宿主机没有定义MY_NAME
时,查看结果
[root@liubei mysql]# echo $MY_NAME
[root@liubei mysql]# docker-compose config
services:
mysql:
environment:
MYSQL_DATABASE: liubeidb
MYSQL_PASSWORD: liubei@2021
MYSQL_ROOT_PASSWORD: Boe888888
MYSQL_USER: liubei
TZ: Asia/Shanghai
image: harbocto.boe.com.cn/public/mysql:5.7
ports:
- 3306:3306/tcp
restart: always
volumes:
- /usr/local/mysql/data:/var/lib/mysql:rw
version: '3.1'
如上可见,因为宿主机没有变量MY_NAME
,mysql用户名和库名使用了默认值。
当宿主机定义MY_NAME=guanYu
时,查看结果
[root@liubei mysql]# export MY_NAME=guanYu
[root@liubei mysql]# echo $MY_NAME
guanYu
[root@liubei mysql]# docker-compose config
services:
mysql:
environment:
MYSQL_DATABASE: guanYudb
MYSQL_PASSWORD: liubei@2021
MYSQL_ROOT_PASSWORD: Boe888888
MYSQL_USER: guanYu
TZ: Asia/Shanghai
image: harbocto.boe.com.cn/public/mysql:5.7
ports:
- 3306:3306/tcp
restart: always
volumes:
- /usr/local/mysql/data:/var/lib/mysql:rw
version: '3.1'
如上可见,因为宿主机定义了变量MY_NAME=guanYu
,mysql用户名和库名使用了该变量值。