文章目录
- 1. 在docker-compose.yml 中定义变量
- 2. 从.env 文件中引入
-
- 2.1 容器中的变量
- 2.2 docker-compose启动时的变量
- 3. 从其他文件中引用
- 4. 引用主机变量
-
- 语法示例
- 完整示例
1. 在docker-compose.yml 中定义变量
- 语法
environment:
KEV: VELUE
KEV: VELUE
或
environment:
- KEV=VELUE
- KEV=VELUE
- 示例
version: '3'
services:
db:
image: 'docker.io/mysql:latest'
environment:
MYSQL_ROOT_PASSWORD: "liubei@2021"
MYSQL_USER: 'liubei'
MYSQL_PASSWORD: 'liubei@2021'
MYSQL_DATABASE:'liubeidb'
......
或者
version: "3.1"
services:
mysql:
image: harbocto.xxx.com.cn/public/mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=liubei@2021
- MYSQL_DATABASE=liubeidb
- TZ=Asia/Shanghai
......
2. 从.env 文件中引入 2.1 容器中的变量
说明:容器启动后,容器中需要用到的变量,可以在1)在docker-compose.yml 相同目录下创建.env目录.env
文件中定义,示例如下:
MYSQL_ROOT_PASSWORD=liubei@2021
MYSQL_DATABASE=mydb
TZ=Asia/Shanghai
注意:值不要加引号,引用之后会自动加2)docker-compose.yml文件配置如下
version: "3.1"
services:
mysql:
image: harbocto.xxx.com.cn/public/mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- TZ
restart: on-failure
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
【#|docker-compose中变量的使用】3) 查看结果
[root@test mysql]# docker-compose config
services:
mysql:
environment:
MYSQL_DATABASE: mydb
MYSQL_ROOT_PASSWORD: liubei@2021
TZ: Asia/Shanghai
image: harbocto.xxx.com.cn/public/mysql:5.7
ports:
- 3306:3306/tcp
restart: on-failure
volumes:
- /usr/local/mysql/data:/var/lib/mysql:rw
version: '3.1'
2.2 docker-compose启动时的变量
说明:1)在 2.1 中的
如果变量是docker-compose.yml文件中要使用的
而不是容器中需要使用的变量
那么我们用如下方法引用:
.env
目录添加如下内容PORT_MYSQL=3306
2)docker-compose.yml文件配置如下
version: "3.1"
services:
mysql:
image: harbocto.xxx.com.cn/public/mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- TZ
restart: on-failure
ports:
- $PORT_MYSQL:3306
volumes:
- ./data:/var/lib/mysql
我们在yml文件中使用 ${PORT_MYSQL}来引用2) 查看结果.env
中的值。
[root@test mysql]# docker-compose config
services:
mysql:
environment:
MYSQL_DATABASE: liubeidb
MYSQL_ROOT_PASSWORD: liubei@2021
TZ: Asia/Shanghai
image: harbocto.xxx.com.cn/public/mysql:5.7
ports:
- 3306:3306/tcp
restart: on-failure
volumes:
- /usr/local/mysql/data:/var/lib/mysql:rw
version: '3.1'
3. 从其他文件中引用
说明:前边是引用当前目录下1) 创建变量文件.env
文件中的变量,如果要引用任意文件,则示例如下:
/tmp/mysql_env
内容如下:MYSQL_ROOT_PASSWORD=liubei@2021
MYSQL_DATABASE=liubeidb
TZ=Asia/Shanghai
2)docker-compose.yml 中引用
[root@test mysql]# docker-compose config
services:
mysql:
environment:
MYSQL_DATABASE: liubeidb
MYSQL_ROOT_PASSWORD: liubei@2021
TZ: Asia/Shanghai
image: harbocto.xxx.com.cn/public/mysql:5.7
ports:
- 3306:3306/tcp
restart: on-failure
volumes:
- /usr/local/mysql/data:/var/lib/mysql:rw
version: '3.1'
3) 查看结果
[root@test mysql]# docker-compose config
services:
mysql:
environment:
MYSQL_DATABASE: liubeidb
MYSQL_ROOT_PASSWORD: liubei@2021
TZ: Asia/Shanghai
image: harbocto.xxx.com.cn/public/mysql:5.7
ports:
- 3306:3306/tcp
restart: on-failure
volumes:
- /usr/local/mysql/data:/var/lib/mysql:rw
version: '3.1'
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用户名和库名使用了该变量值。
文章图片
推荐阅读
- #|docker-compose启动redis集群
- #|helm部署etcd集群
- #|docker-compose 启动pgweb
- #|docker-compose限制容器cpu和内存
- docker|Docker--私有仓库
- docker|docker篇——容器
- kubernetes|七、工作负载
- #|深入解析Kubernetes admission webhooks
- Docker|开发者,Docker是什么能干什么()