#|docker-compose中变量的使用


文章目录

  • 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 容器中的变量
说明:容器启动后,容器中需要用到的变量,可以在.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

【#|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启动时的变量
说明:
如果变量是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用户名和库名使用了该变量值。
#|docker-compose中变量的使用
文章图片

    推荐阅读