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跨主机容器通信overlay实现过程详解

    Docker跨主机容器通信overlay实现过程详解

    这篇文章主要介绍了Docker跨主机容器通信overlay实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Docker MySQL无法被宿主机访问的问题解决

    Docker MySQL无法被宿主机访问的问题解决

    本文主要介绍了Docker MySQL无法被宿主机访问的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 使用Docker搭建私有GitLab的两种方案

    使用Docker搭建私有GitLab的两种方案

    本文给大家分享两种Docker搭建私有GitLab的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-07-07
  • docker环境下安装jenkins容器的详细教程

    docker环境下安装jenkins容器的详细教程

    这篇文章主要介绍了docker环境下安装jenkins容器的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • docker容器中安装vim问题解决

    docker容器中安装vim问题解决

    本文主要介绍了docker容器中安装vim问题解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 超详细Docker Desktop下安装rocketmq的教程

    超详细Docker Desktop下安装rocketmq的教程

    这篇文章主要介绍了Docker Desktop下安装rocketmq,本文内容通过图文操作命令给大家讲解的非常详细,需要的朋友可以参考下
    2021-10-10
  • 关于构建aarch64环境Mysql8.0的Docker镜像问题

    关于构建aarch64环境Mysql8.0的Docker镜像问题

    这篇文章主要介绍了构建aarch64环境Mysql8.0的Docker镜像,需要的朋友可以参考下
    2022-04-04
  • docker安装Jenkins配置Gitee SSH密钥踩坑解决

    docker安装Jenkins配置Gitee SSH密钥踩坑解决

    这篇文章主要为大家介绍了docker安装Jenkins配置Gitee SSH密钥踩坑解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • docker官方镜像下载及使用Dockerfile创建镜像的方法

    docker官方镜像下载及使用Dockerfile创建镜像的方法

    这篇文章主要介绍了docker官方镜像下载及使用Dockerfile创建镜像的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • Docker容器的概念及Docker容器是干什么的

    Docker容器的概念及Docker容器是干什么的

    Docker容器是一种轻量级、可移植的虚拟化技术,用于打包、运输和运行应用程序及其所有依赖项,Docker容器使得开发人员能够更轻松地构建、交付和运行应用程序,同时提高了资源利用率和部署的一致性,感兴趣的朋友跟随小编一起看看吧
    2024-02-02

最新评论