当前位置: 首页 > news >正文

Docker-Compose环境变量

Docker-Compose环境变量

  • 背景
  • 配置文件
  • 修改docker-compose.yml
  • 在服务内部使用环境变量
  • 重新构建容器
  • 补充

背景

现状是通过Docker-Compose配置管理系统的各个容器服务、因为是微服务架构所以配置文件很多、但是例如数据库、redis、kafka等配置都是同一份但是需要在多个配置文件做映射

想到spring可以自动读取环境变量的特性、就准备做一个配置文件预置所有公共配置,将配置文件中的配置写入docker容器的环境变量

配置文件

在docker-compose.yml同级目录下新建文件夹 .env 将公共的配置参数使用key = value的方式写在配置文件中

.env为隐藏文件夹查看时使用ll -a

DB_IP=127.0.0.1
MYSQL_USER=root
MYSQL_PASSWORD= password
HOST=127.0.0.1
REDIS_IP=127.0.0.1
REDIS_PASSWORD= password

修改docker-compose.yml

将配置文件定义的参数传递给容器作为环境变量

version: "2.1"
services:test:container_name: "test"image: jdk8restart: alwaysenvironment:TZ: "Asia/Shanghai"START_COMMAND: ""JAVA_OPTS: "-Xms512m -Xmx2048m"REDIS_IP: $REDIS_IPREDIS_PASSWORD: $REDIS_PASSWORDDB_IP: $DB_IPMYSQL_USER: $MYSQL_USERMYSQL_PASSWORD: $MYSQL_PASSWORDDUBBO_REGISTRY_ADDRESS: $DUBBO_REGISTRY_ADDRESSvolumes:- "/opt/conf:/opt/conf"- "/opt/logs:/opt/logs"network_mode: "host"web:container_name: "web"image: nginxrestart: alwaysports:- 80:80environment:TZ: "Asia/Shanghai"HOST: $HOSTvolumes:- "/opt/nginx/html:/opt/nginx/html"- "/opt/nginx/nginx.conf:/etc/nginx/nginx.conf"- "/opt/nginx/logs/nginx:/etc/nginx/logs"- "/opt/nginx/templates:/etc/nginx/templates"command: /bin/bash -c "envsubst '$${HOST}' < /etc/nginx/templates/default.conf.template > /etc/nginx/nginx.conf && nginx -g 'daemon off;'"

在服务内部使用环境变量

spring:application:name: testdatasource:name: druidDataSourcetype: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://${DB_IP}/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true&useSSL=true&serverTimezone=Asia/Shanghaiusername: ${MYSQL_USER}password: ${MYSQL_PASSWORD}

重新构建容器

需要重新构建使配置的环境变量在服务内部生效生效

# test 为容器名称
docker-compose -f docker-compose.yml up --build -d test 

命令会默认找到docker-compose.yml同目录下的.env文件、需要指定文件可添加参数--env-file形如

docker-compose -f ./docker-compose.yml --env-file /path/.env up --build -d

重新构建后可以通过docker inspect test(容器名)看到容器信息环境变量已经生效、服务也是正常的

补充

nginx和sping服务不一样,在nginx.conf文件不能直接获取环境变量
需要使用 envsubst 将nginx配置的HOST替换
command: /bin/bash -c "envsubst '$${HOST}' < /etc/nginx/templates/default.conf.template > /etc/nginx/nginx.conf && nginx -g 'daemon off;'"

在这里插入图片描述

参考地址:https://www.baeldung-cn.com/linux/nginx-config-environment-variables#23-docker-compose

不通框架使用环境变量可能有限制、例如dubbo的2.6.x版本使用环境变量
在这里插入图片描述
使用别的变量名会有问题。


http://www.mrgr.cn/news/79303.html

相关文章:

  • web基础和http协议
  • 「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果
  • Mysql数据库基础篇笔记
  • LearnOpenGL学习(高级OpenGL -- 深度测试,模板测试,)
  • xss学习前的基础
  • 期末复习-Hadoop名词解释+简答题+代码题hive
  • WordPress阅读文章显示太慢的处理
  • vue 一行显示的动态消息
  • 鸿蒙应用获取wifi连接的ip地址(官方文档获取的格式转换成192.168.1.xxx格式)
  • Linux-实用操作
  • Redis的五种数据类型(String、Hash、List)
  • centos 常见问题处理
  • Qt 面试题学习13_2024-12-1
  • ScribblePrompt 医学图像分割工具,三种标注方式助力图像处理
  • 构建万能 MOCK-API
  • Ubuntu显卡驱动安装
  • 阿里云ECS服务器域名解析
  • 在 MacOS 上为 LM Studio 更换镜像源
  • 使用MATLAB从Excel文件读取数据并绘制堆叠柱状图
  • 数据结构之四:堆和二叉树