docker-compose環(huán)境變量使用及說明
介紹
在項(xiàng)目中,往往需要在 docker-compose.yml 文件中使用環(huán)境變量來控制不同的條件和使用場景,docker-compose支持多級設(shè)置環(huán)境變量。
docker-compose.yml 文件中引用的環(huán)境變量,它們的優(yōu)先級如下:
Compose file Shell environment variables Environment file Dockerfile Variable is not defined
注意:
- 以上優(yōu)先級順序都是指容器引用變量,不包括互相引用。
- compose file中只能引用 Shell環(huán)境變量、
.env環(huán)境文件。引用不到Dockerfile中定義的變量,也引用不了env_file設(shè)置的文件中變量。 - compose file中的變量是不能互相引用的。即設(shè)置一個變量時,引用內(nèi)部的一個變量則結(jié)果是空值。
- composefile中通過$ 符號引用環(huán)境變量,不支持 ${var:-value},${var:=value},${var:default}等語法。從
version:'3'開始支持 ${var:-value} - 很多默認(rèn)值,則可以使用 .env 環(huán)境變量文件解決。
- docker-compose.yml中引用的變量
- /etc/profile等變量并不會對容器生效。
查看當(dāng)前配置命令
docker-compose config
環(huán)境變量的設(shè)置方式
compose file
version: '2'
services:
data-tag-biz:
image: 192.168.1.XX/xxxx/data-standard-biz:9.0
network_mode: "host"
restart: always
ports:
- 10015:9015
environment:
- NACOS-HOST=${NACOS_HOST}
- SW_NAME=test:${SV_NAME}
- SW_SERVICES=192.168.1.XX:11800
- TRACK=-javaagent:/opt/skywalking-agent.jar
- JAVA_OPTS=-Xms512m -Xmx1024m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
container_name: data-standard-biz-9shell環(huán)境變量
export SV_NAME=data-standard-biz
環(huán)境變量文件
docker原生命令
docker run --env-file=web-variables.env
docker file中指定
version: '3'
services:
data-tag-biz:
env_file:
- file.env #相對于docker-compose.yml文件的位置。
environment:
- SV_NAME=data-standard-biz
- NACOS-HOST=${NACOS_HOST}
- SW_NAME=test:${SV_NAME}
- SW_SERVICES=192.168.1.XX:11800
- TRACK=-javaagent:/opt/skywalking-agent.jar
- JAVA_OPTS=-Xms512m -Xmx1024m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
container_name: data-standard-biz-9#file.env SV_NAME=data-standard-biz-envfile ENV_VALUE=env-value NOOP=NO OP KEY
docker-compose config輸出:
services:
data-tag-biz:
container_name: data-standard-biz-9
environment:
ENV_FILE: '' #沒有引用到的變量ENV_VALUE
ENV_VALUE: env-value # 自動加入的
JAVA_OPTS: -Xms512m -Xmx1024m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
NACOS-HOST: 192.168.1.XX
NOOP: NO OP KEY #自動加入的。
SV_NAME: data-standard-biz
SW_NAME: test:data-standard-biz-env
SW_SERVICES: 192.168.1.XX:11800
TRACK: -javaagent:/opt/skywalking-agent.jar
image: 192.168.1.36/xxxx/data-standard-biz:9.0
network_mode: host
ports:
- 10015:9015/tcp
restart: always
version: '3.0'docker-compose文件中的變量是引用不到 環(huán)境文件中定義的變量的。環(huán)境文件中定義的所有變量是僅相對于容器可見的。
環(huán)境變量文件中的所有變量都會自動加到變量列表中,不需要在docker-compose中定義。
.env 文件
在docker-compose.yml同級目錄中加入.env文件,則可以設(shè)置docker-compose環(huán)境變量的默認(rèn)值,可以在docker-compose中引用到的。
此文件可以為大量的變量配置默認(rèn)值,用來代替${var:-defaultvalue}
version: '3'
services:
data-tag-biz:
... ...
environment:
- SV_NAME=data-standard-biz
- NACOS-HOST=${NACOS_HOST}
- SW_NAME=test:${SV_NAME} #如果不設(shè)置,則默認(rèn)使用 .env中默認(rèn)值。
... ... # .env SV_NAME=data-standard-biz-env TEST_ENV=xxxxxxxx
docker-compose config輸出:
services:
data-tag-biz:
container_name: data-standard-biz-9
environment:
ENV_FILE: ''
ENV_VALUE: env-value
JAVA_OPTS: -Xms512m -Xmx1024m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
NACOS-HOST: 192.168.1.XX
NOOP: NO OP KEY
SV_NAME: data-standard-biz
SW_NAME: test:data-standard-biz-env #使用了 .env中默認(rèn)值。
SW_SERVICES: 192.168.1.XX:11800
TRACK: -javaagent:/opt/skywalking-agent.jar
image: 192.168.1.XX/xxxx/data-standard-biz:9.0
network_mode: host
ports:
- 10015:9015/tcp
restart: always
version: '3.0'Compose CLI 環(huán)境變量
Compose CLI(compose command-line 即 docker-compose 程序)能夠識別名稱為 COMPOSE_PROJECT_NAME 和 COMPOSE_FILE 等環(huán)境變量(具體支持的環(huán)境變量請參考這里)。
通過設(shè)置這些變量可以控制docker-compose的行為。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker-compose啟動redis多機(jī)集群的實(shí)現(xiàn)(6臺服務(wù)器3主3從)
本文主要介紹了docker-compose啟動redis多機(jī)集群的實(shí)現(xiàn)(6臺服務(wù)器3主3從),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
ubuntu系統(tǒng)中無法拉取docker鏡像的問題及解決
作者遇到的docker拉取mysql8.0鏡像失敗的問題,通過更換鏡像加速器、更新配置、診斷DNS解析問題等步驟,最終成功使用DaoCloud鏡像站拉取鏡像,作者分享了解決問題的過程和經(jīng)驗(yàn),對遇到類似問題的人會有幫助2026-04-04
Docker部署搭建WebDav服務(wù)的詳細(xì)過程
這篇文章主要介紹了Docker部署WebDav服務(wù),小編綜合了各種共享方式后最終選擇了使用 WebDav 來共享文件,下面小編把搭建部署過程分享給大家,需要的朋友可以參考下2022-08-08
如何在docker中運(yùn)行springboot項(xiàng)目過程圖解
這篇文章主要介紹了如何在docker中運(yùn)行springboot項(xiàng)目過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
Docker安裝Nginx并部署及MySQL容器構(gòu)建全過程
眾所周知Docker是一種容器化技術(shù),可以用來快速部署和管理應(yīng)用程序,這篇文章主要給大家介紹了關(guān)于Docker安裝Nginx并部署及MySQL容器構(gòu)建的相關(guān)資料,需要的朋友可以參考下2024-02-02
docker中通過nginx+confd動態(tài)生成配置的解決方案
這篇文章主要介紹了docker:nginx+confd動態(tài)生成配置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03
在Docker中部署Confluence和jira-software的方法步驟
這篇文章主要介紹了在Docker中部署Confluence和jira-software的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06
使用Dockerfile部署nodejs服務(wù)的方法步驟
這篇文章主要介紹了使用Dockerfile部署nodejs服務(wù)的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01

