Расширение службы в docker-compose 3

Я создал сервис для docker-compose 3, который использует множество переменных среды:

version: "3"

services:
  myservice:
    build:
      context: ./myservice
    command: ./something
    environment:
      VAR1: "val1"
      VAR2: "val2"
      VAR3: "val3"

теперь я хочу добавить службу, которая использует те же значения переменных среды, за исключением VAL1, и это имеет другую команду:

myotherservice:
    build:
      context: ./myservice
    command: ./somethingelse
    environment:
      VAR1: "val1-bis"
      VAR2: "val2"
      VAR3: "val3"

есть ли способ избежать дублирования переменных среды в ? В docker-compose 2 можно было использовать extends ключевое слово, но это больше не так в docker-compose 3.

EDIT: в октябре 2017 года в синтаксис docker-compose 3.4 были добавлены поля расширения:https://docs.docker.com/compose/compose-file/#extension-fields это правильный путь:

version: "3"
x-env:
  &default-env
  VAR1: "val1"
  VAR2: "val2"
  VAR3: "val3"
services:
  myservice:
    build:
      context: ./myservice
    command: ./something
    environment: *default-env
myotherservice:
    build:
      context: ./myservice
    command: ./somethingelse
    environment:
      << : *default-env
      VAR1: "val1-bis"

1 ответов


вы можете извлечь общие переменные среды в env.

после этого вы можете использовать env_file опция конфигурации в вашем файле compose.

-> cat common.env
      VAR2=val2
      VAR3=val3

вы все еще можете передавать/перезаписывать переменные среды, отличные от указанных в common.env С помощью environment настройки выбор.

myotherservice:
  build:
    context: ./myservice
  command: ./somethingelse
  env_file: ./common.env
  environment:
    VAR1: "val1-bis"

ссылка