docker-compose中的环境变量问题

 更新时间:2023年11月24日 09:01:35   作者:程行者  
这篇文章主要介绍了docker-compose中的环境变量问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

docker-compose 环境变量

每次部署必需要修改的配置从交付件里独立出来,通过docker-compose传变量覆盖原有配置

记录下, 以备查阅

[root@test03 test]# cat docker-compose.yml 
version: '2'
services:
  mysql:
    image: test_db:v1
    container_name: xx-mysql
    restart: always
    networks:
      - nets
    environment:
      - MYSQL_ROOT_PASSWORD=xxx0209
    ports:
      - 3306:3306
    volumes:
      - /opt/data/mysql:/var/lib/mysql:z
  redis:
    image: test_redis:v1
    container_name: xx-redis
    restart: always
    networks:
      - nets
    ports:
      - 6379:6379
  admin:
    image: test_admin:v1
    container_name: xx-admin
    restart: always
    # 使用nets网络
    networks:
      - nets
    env_file:
      - ./.env
    environment:
      # 引用环境变量,最终是传入容器里交付件的启动命令中
      # 例 java -jar -Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08 -Xmx1433m -Dglobal.domain.inter=http://10.90.2.103:8080 ./app.jar
      - JAVA_OPTS=-Duser.timezone=GMT+08 ${Xmx} -D${inter}
    depends_on:
      - mysql
      - redis
    ports:
      - ${pub_port}:8015
# 创建自定义网络
networks:
  nets:
    external: false

容器间应用交互使用container_name定义的名称

Xmx,inter,pub_port是我用到的环境变量,通过查阅文档,变量可以定义到一个文件中,如定义到.env中,如下:

[root@test03 test]# cat .env 
# memory
Xmx=-Xmx1433m
# open ports
pub_port=8080
# inter 
inter=global.domain.inter=http://10.90.2.103:8080

注意:

env_file和environment中定义的环境变量是传给container用的而不是在docker-compose.yml中的环境变量用的

docker-compose.yml中的环境变量${VARIABLE:-default}引用的是在.env中定义的或者同个shell export出来的

可以通过命令查看变量已经被引用了

[root@test03 test]# docker-compose config
...
    environment:
      JAVA_OPTS: -Duser.timezone=GMT+08 -Xmx1433m -Dglobal.domain.inter=http://10.90.2.103:8080
...

建议env_file 引入的文件名为.env,最好不要使用其他名称

  • 优点:

.env文件变更会实时更新docker-compose中的引用,使用其他名称不会实时更新docker-compose中的引用,使用其他名称在docker-compose中引用有时会

WARNING: The DB_DIR variable is not set. Defaulting to a blank string.

  • 缺点:

自定义名称不方便

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker移除镜像几种不同的方法实战记录

    Docker移除镜像几种不同的方法实战记录

    在Docker实战中,合理删除不再需要的镜像,有助于释放宝贵的磁盘空间,删除Docker镜像可以通过多种方式,包括删除单个镜像、强制删除正在使用的镜像、删除未被任何容器引用的所有镜像以及删除所有镜像等,需要的朋友可以参考下
    2024-11-11
  • Docker镜像的默认存储位置及修改步骤

    Docker镜像的默认存储位置及修改步骤

    Docker镜像默认存储在 /var/lib/docker 目录下,在Linux系统中,这个目录通常是在根目录下,可以使用相应命令查看,下面给大家介绍Docker镜像的默认存储位置及修改步骤,感兴趣的朋友一起看看吧
    2024-06-06
  • SpringBoot 整合 Docker的详细过程

    SpringBoot 整合 Docker的详细过程

    这篇文章主要介绍了SpringBoot 整合 Docker的详细过程,本文通过一个简单的项目来给大家介绍整合的详细过程,需要的朋友可以参考下
    2021-11-11
  • docker-compose build使用参数args方式

    docker-compose build使用参数args方式

    这篇文章主要介绍了docker-compose build使用参数args方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 解决docker安装完成报:bridge-nf-call-iptables is disabled问题

    解决docker安装完成报:bridge-nf-call-iptables is disabled问题

    这篇文章主要介绍了解决docker安装完成报:bridge-nf-call-iptables is disabled问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker容器下配置jupyter notebook的操作

    docker容器下配置jupyter notebook的操作

    这篇文章主要介绍了docker容器下配置jupyter notebook的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 基于Docker搭建ELK 日志系统的方法

    基于Docker搭建ELK 日志系统的方法

    Beats,它是一个轻量级的日志收集处理工具(Agent),占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具,本文重点给大家介绍Docker 搭建 ELK 日志系统的方法,感兴趣的朋友一起看看吧
    2021-05-05
  • centos修改docker网络配置方法分享

    centos修改docker网络配置方法分享

    本文给大家分享的是centos修改docker网络配置的方法,非常的实用,有需要的小伙伴可以参考下
    2017-03-03
  • docker run -v 挂载数据卷异常,容器状态一直是restarting的解决

    docker run -v 挂载数据卷异常,容器状态一直是restarting的解决

    这篇文章主要介绍了docker run -v 挂载数据卷异常,容器状态一直是restarting的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 如何在Docker中设置Redis的密码

    如何在Docker中设置Redis的密码

    这篇文章主要介绍了在Docker中设置Redis的密码的相关知识,通过使用Docker,我们可以轻松地启动Redis容器并设置密码来保护我们的Redis实例,这提供了一个简单和可移植的方法来部署和管理Redis服务器,感兴趣的朋友一起看看吧
    2023-11-11

最新评论