Как получить и установить случайный сервисный порт как env var в файле docker-compose? - PullRequest
0 голосов
/ 06 октября 2018

Вот пример docker-compose.yml:

# docker-compose.yml

version: '3'

services:
  web:
    image: ghost:latest
    ports:
      - 0:2368
    environment:
      url: http://ghost.localhost:30001

Я хотел бы получить служебный случайный порт и установить его внутри url env-переменной следующим образом:

url: "http://ghost.localhost:{{.Service.Port}}"

Конечная цель - развернуть несколько стеков без заданного вручную порта.

docker stack deploy --compose-file=docker-compose.yml ghost1
docker stack deploy --compose-file=docker-compose.yml ghost2
docker stack deploy --compose-file=docker-compose.yml ghost3

Это возможно?

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

Используйте файл .env для определения динамических значений в docker-compse.yml.Будь то порт или любое другое значение.

Пример docker-compose:

testcore.web:
       image: xxxxxxxxxxxxxxx.dkr.ecr.ap-northeast-2.amazonaws.com/testcore:latest
       volumes: 
            - c:/logs:c:/logs
       ports:
            - ${TEST_CORE_PORT}:80
       environment:
            - CONSUL_URL=http://${CONSUL_IP}:8500 
            - HOST=${HOST_ADDRESS}:${TEST_CORE_PORT}

Внутри файла .env вы можете определить значение этих переменных:

CONSUL_IP=172.31.28.151
HOST_ADDRESS=172.31.16.221
TEST_CORE_PORT=10002
0 голосов
/ 09 октября 2018

Нет, сейчас это невозможно. запрос на добавление , но он все еще открыт (ему более 4 лет).

0 голосов
/ 06 октября 2018

Да, вы можете выбрать диапазон портов (я бы рекомендовал использовать более высокий диапазон, например 9000-9100), но имейте в виду, что процесс запускается для каждого открытого порта: Почему Docker запускает так многопроцессы для сопоставления портов с моим приложением? Таким образом, производительность, скорее всего, будет ниже идеальной.

Возможно, вы захотите использовать докер "хост-сеть" или другие нестандартные настройки сети.

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