..

在docker-compose中使用环境变量

和Makefile一样,docker compose中也是可以使用环境变量的,也是使用${var}这样的方式来使用

version: '3'
services:
  app:
    build:
      context: ./docker/app
      dockerfile: Dockerfile
    image: shippingdocker/app:latest
    networks:
     - appnet
    volumes:
     - .:/var/www/html
    ports:
     - ${APP_PORT}:80
    working_dir: /var/www/html
  cache:
    image: redis:alpine
    networks:
     - appnet
    volumes:
     - cachedata:/data
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: homestead
      MYSQL_USER: homestead
      MYSQL_PASSWORD: secret
    ports:
     - ${DB_PORT}:3306
    networks:
     - appnet
    volumes:
     - dbdata:/var/lib/mysql
  node:
    build:
      context: ./docker/node
      dockerfile: Dockerfile
    image: shippingdocker/node:latest
    networks:
     - appnet
    volumes:
     - .:/opt
    working_dir: /opt
    command: echo hi
networks:
  appnet:
    driver: bridge
volumes:
  dbdata:
    driver: local
  cachedata:
    driver: local

这里面好几个端口都是使用的环境变了来指定的,我们可以在启动docker compose的时候,传递这个环境变量

export APP_PORT=8080
docker-compose up -d

或者

DB_PORT=3306 docker-compose up -d

.env

docker-compose同时也支持dotfile来管理环境变量,在docker compose的同级别目录下面放置.env文件,docker-compose中的变量会被自动替换。