docker-compose 环境变量问题

2018-08-02  本文已影响0人  程序员同行者

每次部署必需要修改的配置从交付件里独立出来,通过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

[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
...
  1. 优点: .env文件变更会实时更新docker-compose中的引用,使用其他名称不会实时更新docker-compose中的引用,使用其他名称在docker-compose中引用有时会WARNING: The DB_DIR variable is not set. Defaulting to a blank string.
  2. 缺点: 自定义名称不方便
上一篇下一篇

猜你喜欢

热点阅读