docker-compose中变量的使用

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 容器中的变量

说明:容器启动后,容器中需要用到的变量,可以在.env文件中定义,示例如下:

1)在docker-compose.yml 相同目录下创建.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

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启动时的变量

说明:

如果变量是docker-compose.yml文件中要使用的

而不是容器中需要使用的变量

那么我们用如下方法引用:

1)在 2.1 中的.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}来引用.env中的值。

2) 查看结果

[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. 从其他文件中引用

说明:前边是引用当前目录下 .env文件中的变量,如果要引用任意文件,则示例如下:

1) 创建变量文件 /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用户名和库名使用了该变量值。


在这里插入图片描述

posted on   运维开发玄德公  阅读(352)  评论(0编辑  收藏  举报  

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示