docker-compose定義和引用變量

1. 在yml文件中定義變量

添加 environment:字段偿警,后邊跟數(shù)組格式 " key: val "

# docker-compose.yml
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'
    ……

2. 在.env文件中的變量

2.1 容器中引用為環(huán)境變量

  • .env 文件
TZ=Asia/Shanghai
MYSQL_ROOT_PASSWORD=liubei@2021
  • docker-compose.yml文件
    添加 environment:字段,后邊跟數(shù)組格式 " - xxxx "
version: '3'
services:
  mysql:
    image: 'docker.io/mysql:latest'
    restart: always
    container_name: mysql
    ports:
      - '13306:3306'
    environment:
      - MYSQL_ROOT_PASSWORD
      - TZ
  • 查看結(jié)果
[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文件啟動(dòng)容器時(shí)的變量

說明:比如映射出哪個(gè)端口具壮,容器的名字等等。這些并不是容器中的變量坦刀,我們也可以直接在.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
      - TZ
  • 查看
[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. 引用其他文件的變量

  • 變量文件
    創(chuàng)建 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
  • 查看結(jié)果

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. 引用主機(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ī)沒有定義MY_NAME時(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'

如上可見,因?yàn)樗拗鳈C(jī)沒有變量MY_NAME挠羔,mysql用戶名和庫(kù)名使用了默認(rèn)值井仰。

  • 當(dāng)宿主機(jī)定義MY_NAME=guanYu時(shí),查看結(jié)果
[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'

如上可見破加,因?yàn)樗拗鳈C(jī)定義了變量MY_NAME=guanYu俱恶,mysql用戶名和庫(kù)名使用了該變量值。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市合是,隨后出現(xiàn)的幾起案子了罪,更是在濱河造成了極大的恐慌,老刑警劉巖端仰,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捶惜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡荔烧,警方通過查閱死者的電腦和手機(jī)吱七,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹤竭,“玉大人踊餐,你說我怎么就攤上這事⊥沃桑” “怎么了吝岭?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吧寺。 經(jīng)常有香客問我窜管,道長(zhǎng),這世上最難降的妖魔是什么稚机? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任幕帆,我火速辦了婚禮,結(jié)果婚禮上赖条,老公的妹妹穿的比我還像新娘失乾。我一直安慰自己,他們只是感情好纬乍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布碱茁。 她就那樣靜靜地躺著,像睡著了一般仿贬。 火紅的嫁衣襯著肌膚如雪纽竣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天茧泪,我揣著相機(jī)與錄音蜓氨,去河邊找鬼。 笑死调炬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的舱馅。 我是一名探鬼主播缰泡,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了棘钞?” 一聲冷哼從身側(cè)響起缠借,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宜猜,沒想到半個(gè)月后泼返,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姨拥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年绅喉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叫乌。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柴罐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出憨奸,到底是詐尸還是另有隱情革屠,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布排宰,位于F島的核電站似芝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏板甘。R本人自食惡果不足惜党瓮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虾啦。 院中可真熱鬧麻诀,春花似錦、人聲如沸傲醉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)硬毕。三九已至呻引,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吐咳,已是汗流浹背逻悠。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留韭脊,地道東北人童谒。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像沪羔,于是被迫代替她去往敵國(guó)和親饥伊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容