docker-compose中變量的使用方式
1. 在docker-compose.yml 中定義變量
- 語(yǔ)法
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 容器中的變量
說(shuō)明:容器啟動(dòng)后,容器中需要用到的變量,可以在.env文件中定義
示例如下:
1)在docker-compose.yml 相同目錄下創(chuàng)建.env目錄
MYSQL_ROOT_PASSWORD=liubei@2021 MYSQL_DATABASE=mydb TZ=Asia/Shanghai
注意:值不要加引號(hào),引用之后會(huì)自動(dòng)加
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) 查看結(jié)果
[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啟動(dòng)時(shí)的變量
說(shuō)明:
- 如果變量是docker-compose.yml文件中要使用的
- 而不是容器中需要使用的變量
- 那么我們用如下方法引用:
1)在 2.1 中的.env目錄添加如下內(nèi)容
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
我們?cè)趛ml文件中使用 ${PORT_MYSQL}來(lái)引用.env中的值。
2) 查看結(jié)果
[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. 從其他文件中引用
說(shuō)明:前邊是引用當(dāng)前目錄下 .env文件中的變量,如果要引用任意文件,則示例如下:
1) 創(chuàng)建變量文件 /tmp/mysql_env 內(nèi)容如下:
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) 查看結(jié)果
[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. 引用主機(jī)變量
語(yǔ)法示例
environment:
XI_SHU: ${MY_NAME:-liubei}
容器中變量key為:XI_SHU,它的值會(huì)讀取宿主機(jī)key為MY_NAME的值,缺省默認(rèn)使用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
當(dāng)宿主機(jī)沒(méi)有定義MY_NAME時(shí),查看結(jié)果
如上可見(jiàn),因?yàn)樗拗鳈C(jī)沒(méi)有變量MY_NAME,mysql用戶名和庫(kù)名使用了默認(rèn)值。
當(dāng)宿主機(jī)定義MY_NAME=guanYu時(shí),查看結(jié)果
[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'
如上可見(jiàn),因?yàn)樗拗鳈C(jī)定義了變量MY_NAME=guanYu,mysql用戶名和庫(kù)名使用了該變量值。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker 容器指定自定義網(wǎng)段的固定IP/靜態(tài)IP地址
這篇文章主要介紹了Docker 容器指定自定義網(wǎng)段的固定IP/靜態(tài)IP地址的相關(guān)資料,需要的朋友可以參考下2016-12-12
Docker輕松自建RustDesk服務(wù)器的實(shí)現(xiàn)步驟
本文介紹通過(guò)Docker和自動(dòng)化腳本在Linux服務(wù)器部署RustDesk的hbbs和hbbr組件,實(shí)現(xiàn)自建私有服務(wù)器以提升隱私、安全與靈活性,并提供客戶端配置及注意事項(xiàng),感興趣的可以了解一下2025-09-09
docker network 自定義網(wǎng)絡(luò)配置與管理指南詳細(xì)過(guò)程
Docker網(wǎng)絡(luò)是容器間通信和與外部世界交互的基礎(chǔ),通過(guò)自定義網(wǎng)絡(luò),可以實(shí)現(xiàn)容器間的隔離、靜態(tài) IP 分配和服務(wù)發(fā)現(xiàn),這篇文章主要介紹了docker network 自定義網(wǎng)絡(luò)配置與管理指南,需要的朋友可以參考下2025-05-05
如何修改Docker部署gitlab的外部訪問(wèn)地址和端口
這篇文章主要介紹了如何修改Docker部署gitlab的外部訪問(wèn)地址和端口問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
docker在已有的tomcat鏡像上打新的鏡像的Dockerfile編寫(xiě)說(shuō)明介紹
這篇文章主要介紹了docker在已有的tomcat鏡像上打新的鏡像的Dockerfile編寫(xiě)說(shuō)明介紹,需要的朋友可以參考下2016-10-10
Docker?制作tomcat鏡像并部署項(xiàng)目的步驟
這篇文章主要介紹了Docker?制作tomcat鏡像并部署項(xiàng)目?,講解如何制作自己的tomcat鏡像,并使用tomcat部署項(xiàng)目,需要的朋友可以參考下2022-10-10
Docker安裝RabbitMQ后訪問(wèn)報(bào)錯(cuò)的最佳解決方案
這篇文章主要介紹了Docker安裝RabbitMQ后訪問(wèn)報(bào)錯(cuò)的最佳解決方案,錯(cuò)誤通常是由于RabbitMQ的安全配置導(dǎo)致的,RabbitMQ默認(rèn)配置允許的用戶僅能通過(guò)localhost訪問(wèn),文中通過(guò)圖文講解的非常詳細(xì),需要的朋友可以參考下2025-01-01

