Docker-Compose环境变量

news2025/1/11 22:41:54

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: jdk8
    restart: always
    environment:
        TZ: "Asia/Shanghai"
        START_COMMAND: ""
        JAVA_OPTS: "-Xms512m -Xmx2048m"
        REDIS_IP: $REDIS_IP
        REDIS_PASSWORD: $REDIS_PASSWORD
        DB_IP: $DB_IP
        MYSQL_USER: $MYSQL_USER
        MYSQL_PASSWORD: $MYSQL_PASSWORD
        DUBBO_REGISTRY_ADDRESS: $DUBBO_REGISTRY_ADDRESS
    volumes:
      - "/opt/conf:/opt/conf"
      - "/opt/logs:/opt/logs"
    network_mode: "host"
    
  web:
    container_name: "web"
    image: nginx
    restart: always
    ports:
      - 80:80
    environment:
        TZ: "Asia/Shanghai"
        HOST: $HOST
    volumes:
      - "/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: test

  datasource:
    name: druidDataSource
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://${DB_IP}/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true&useSSL=true&serverTimezone=Asia/Shanghai
    username: ${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.coloradmin.cn/o/2254703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cocotb pytest

打印python中的print &#xff0c; 应该使用 pytest -s pytest --junitxmltest_report.xml --htmlreport.html

openEuler yum 设置国内镜像

查看openEuler系统信息 cat /etc/os-release可以看到详细系统版本如下 NAME"openEuler" VERSION"24.09" ID"openEuler" VERSION_ID"24.09" PRETTY_NAME"openEuler 24.09" ANSI_COLOR"0;31"系统使用的版本是24.0…

电脑鼠标箭头一直闪烁怎么回事?原因及解决方法

电脑鼠标箭头不停闪烁&#xff0c;很多用户都曾遇到过&#xff0c;就是点击也无法点击&#xff0c;只能看到箭头一直闪动。造成这种故障的原因有很多&#xff0c;可能是硬件、软件或系统的问题。本文将介绍电脑鼠标箭头不停闪烁的可能原因和相应的解决方法&#xff0c;帮助大家…

【开源】A064—基于JAVA的民族婚纱预定系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…

Qt6.8 QGraphicsView鼠标坐标点偏差

ui文件拖放QGraphicsView&#xff0c;src文件定义QGraphicsScene赋值给图形视图。 this->scene new QGraphicsScene();ui.graph->setScene(this->scene);对graphicview过滤事件&#xff0c;只能在其viewport之后安装&#xff0c;否则不响应。 ui.graph->viewport…

TxT360: 一个大规模、高质量、多源融合的数据集,专为预训练大型语言模型设计。

2024-10-04, LLM360项目团队创建了TxT360数据集&#xff0c;这个数据集通过整合多种数据源&#xff0c;为预训练大型语言模型提供了丰富的训练材料&#xff0c;具有重要的研究和应用价值。 数据集地址&#xff1a;TxT360|预训练语言模型数据集|预训练数据集 一、研究背景&…

计算机网络-GRE基础实验二

前面我们学习了GRE隧道的建立以及通过静态路由指向的方式使得双方能够网络互联&#xff0c;但是通过静态路由可能比较麻烦&#xff0c;GRE支持组播、单播、广播因此可以在GRE隧道中运行动态路由协议使得网络配置更加灵活。 通过前面的动态路由协议的学习我们知道动态路由协议都…

asp.net core过滤器应用

筛选器类型 授权筛选器 授权过滤器是过滤器管道的第一个被执行的过滤器&#xff0c;用于系统授权。一般不会编写自定义的授权过滤器&#xff0c;而是配置授权策略或编写自定义授权策略。简单举个例子。 using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCo…

Pixtral Large开源:Mistral AI的1240亿参数多模态模型超越GPT-4o等竞争对手

Pixtral Large是什么 Pixtral Large是由法国人工智能初创公司Mistral AI开发的超大多模态模型&#xff0c;拥有1240亿参数&#xff0c;2024年11月18日正式对外发布。它基于Mistral Large 2开发而成&#xff0c;具备1230亿参数的多模态解码器和10亿参数的视觉编码器。这个模型能…

【Diffusion分割】基于先验知识的显式-隐式扩散模型用于医学图像分割

扩散概率模型(DPM)在当前的图像生成任务中取得了无与伦比的成果,最近的一些研究工作将其应用于多个计算机视觉任务中,如图像超分辨率、物体检测等。得益于 DPM 生成细粒度细节的卓越能力,这些研究工作取得了显著的成果。在本文中,提出了一种新的基于 DPM 的生成式医学图像…

双目相机的标定,视差图,深度图,点云生成思路与实现。

该文档记录从双目相机标定到点云生成的所有过程&#xff0c;同时会附上代码。 代码直接能跑。https://github.com/stu-yzZ/stereoCamera 目录 大致思路如下&#xff1a; 一、相机标定 1、相机参数介绍 2、单目相机标定 3、双目相机标定 二、图片畸变矫正 三、极线矫正…

记录一下,解决js内存溢出npm ERR! code ELIFECYCLEnpm ERR! errno 134 以及 errno 9009

项目是个老项目&#xff0c;依赖包也比较大&#xff0c;咱就按正常流程走一遍来详细解决这个问题&#xff0c;先看一下node版本&#xff0c;我用的是nvm管理的&#xff0c;详细可以看我的其他文章 友情提醒&#xff1a;如果项目比较老&#xff0c;包又大&#xff0c;又有一些需…

秒懂:使用js验证hash, content hash , chunk hash的区别

一、使用js验证hash, content hash , chunk hash的区别 1、计算一般的 Hash&#xff08;以简单字符串为例&#xff09; 使用crypto-js库来进行哈希计算&#xff0c;需提前引入npm install crypto-js库。 crypto-js&#xff1a; 是一个JavaScript加密算法库&#xff0c;用于实…

基于MATLAB野外观测站生态气象数据处理分析实践应用

1.本课程基于MATLAB语言 2.以实践案例为主&#xff0c;提供所有代码 3.原理与操作结合 4.布置作业&#xff0c;答疑与拓展 示意图&#xff1a; 以野外观测站高频时序生态气象数据为例&#xff0c;基于MATLAB开展上机操作&#xff1a; 1.不同生态气象要素文件的数据读写与批处理…

Unity 画线(UILineRenderer)

实现 以鼠标点击点作为起点创建UILineRenderer 并记录起点。 GameObject go new GameObject(); go.transform.parent transPaint; go.transform.localPosition Vector3.zero; line go.AddComponent<UILineRenderer>(); line.LineWidth widthLine; line.color col…

D86【python 接口自动化学习】- pytest基础用法

day86 pytest配置testpaths 学习日期&#xff1a;20241202 学习目标&#xff1a;pytest基础用法 -- pytest配置testpaths 学习笔记&#xff1a; pytest配置项 主目录创建pytest.ini文件 [pytest] testpaths./testRule 然后Terminal里直接命令&#xff1a;pytest&#xff…

bash命令缓存导致命令执行失败的问题

1、问题背景 为了修复老版本 vsftpd 的安全漏洞&#xff0c;需要把生产环境上 vsftpd 版本升级到 vsftpd-3.0.5&#xff0c;因为直接使用 rpm 包的方式进行升级还涉及到下层依赖包的升级(生产环境上的依赖包版本不能随意变更&#xff0c;可能会影响其他上层应用)&#xff0c;所…

【设计模式系列】工厂方法模式(二十一)

一、什么是工厂方法模式 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;其核心目的是定义一个创建对象的接口&#xff0c;但让实现这个接口的子类来决定实例化哪一个类。工厂方法模式让类的实例化推迟到子类中进行&#xff0c;…

Windows 和 Ubuntu 双系统安装

复现论文的时候&#xff0c;个别包只有Linux版本&#xff0c;并且源码编译比较麻烦&#xff0c;所以干脆直接安装一个双系统&#xff08;WinUbuntu&#xff09;&#xff0c;方便复现论文。 参考视频链接&#xff1a;Windows 和 Ubuntu 双系统的安装和卸载 0.所需工具 4G以上U…

DAY35|动态规划Part03|LeetCode:01背包问题 二维、01背包问题 一维、416. 分割等和子集

目录 01背包理论基础&#xff08;一&#xff09; 基本思路 C代码 01背包理论基础&#xff08;二&#xff09; 基本思路 C代码 LeetCode:416. 分割等和子集 基本思路 C代码 01背包理论基础&#xff08;一&#xff09; 题目链接&#xff1a;卡码网46. 携带研究材料 文字…