целочисленное выражение переменной в docker-compose.yml - PullRequest
0 голосов
/ 22 февраля 2019

Я хотел бы использовать целочисленное выражение в docker-compose.yml для установки портов на основе переменной BASE_PORT.

У меня есть файл .env со следующим содержимым:

BASE_PORT=57900

Мой стартовый bash-скрипт выглядит следующим образом:

#/bin/sh

. .env
docker-compose stop
docker-compose rm -v -f
docker-compose up -d adminserver

docker-compose.yml

...
services:
  adminserver:
    image: ....
    hostname: ...
    ports:
      - ${BASE_PORT}:8001
    ...

Эта конфигурация работает как талисман, docker ps | grep 8001 возвращается с правильным содержимым.

Но я хотел бы использовать больше конфигураций портов и больше ports разделов:

...
services:
  adminserver:
    image: ....
    hostname: ...
    ports:
      - $((BASE_PORT+1)):8001
      - $((BASE_PORT+2)):8002
      - $((BASE_PORT+3)):8003
    ...

  databaseserver:
    image: ....
    hostname: ...
    ports:
      - $((BASE_PORT+10)):1541

  zookeeper:
    image: ....
    hostname: ...
    ports:
      - $((BASE_PORT+30)):2181

  kafka:
    image: ....
    hostname: ...
    ports:
      - $((BASE_PORT+40)):9092
      - $((BASE_PORT+41)):9093
      - $((BASE_PORT+42)):9094

Выражение $((BASE_PORT+1)) работает в оболочке, но не работает в моем файле * .yml.

Я получаю эту ошибку обратно:

ERROR: Invalid interpolation format for "ports" option in service "adminserver": "$((BASE_PORT+1)):8001"

Любая идея, как сделатьэто работает?

1 Ответ

0 голосов
/ 22 февраля 2019

Docker Compose просто не поддерживает это.

В вашем примере у вас есть ряд смежных портов как на стороне хоста, так и на стороне контейнера. Синтаксис ports: поддерживает этот режим:

ports:
  - '10000-10003:8000-8003'

Все еще нет синтаксического анализатора выражений или математических возможностей, но вы можете написать

ports:

  - '${BASE_PORT}-${FINAL_PORT}:8000-8003'

и это было бы ближе к тому, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...