Доступ к имени службы, которое находится в другом файле docker-compose, но в той же сети

Я пытаюсь настроить основной файл для создания докеров, который содержит такие вещи, как база данных, аутентификация Firebase, эмулятор pubsub и т. д. Этот основной файл находится в родительском каталоге, и в каждой подпапке есть файлы для создания докеров. Я следую архитектуре микросервисов, но мне не нужен один большой компоновочный файл, поскольку количество микросервисов превышает 50, и в конечном итоге он использует много ресурсов. Итак, мне удалось создать файлы в той же сети докеров, но проблема, с которой я столкнулся сейчас, заключается в том, что я не могу использовать имя службы в файле docker-compose родительской папки внутри файла docker-compose дочерней папки.

Вот пример службы docker-compose в родительской папке:

  postgres_db:
    image: postgres:latest
    restart: always
    environment:
      - POSTGRES_PASSWORD=postgrespw
    ports:
      - "5432:5432"
    volumes:
      - postgres:/var/lib/postgresql/data

А вот пример службы docker-compose в дочерней папке:

  service_1:
    build:
      context: ../../
      dockerfile: ./services/service_1/Dockerfile.dev
      target: development
    restart: always
    environment:
      - DATABASE_URL=postgresql+psycopg2://postgres:postgrespw@postgres_db:5432/localdb
      - PORT=8080
    ports:
      - "8080:8080"
    volumes:
      - ../../lib/:/app/lib
      - ../../services/service_1/:/app
    depends_on:
      - postgres_db

Это вызывает следующую ошибку:

служба "service_1" зависит от неопределенной службы postgres_db: недопустимо составить проект

Мне нужно иметь возможность использовать имя службы родительского файла docker-compose внутри дочернего файла docker-compose.

вы должны иметь возможность ссылаться на контейнеры по имени, если они находятся в одной сети, но depends_on основан на файле компоновки, а не на запущенных контейнерах. Таким образом, вам придется удалить depends_on и, если это проблема, обойти ее — в любом случае рекомендуется, чтобы ваше приложение «поднималось» и проходило проверки работоспособности, даже если службы, от которых оно зависит, не работают, иначе вы можете создавать цепочки отказов или даже циклические зависимости.

erik258 10.04.2023 03:31
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
1
80
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

depends_on цель состоит в том, чтобы обрабатывать зависимости контейнеров в одном файле компоновки и отображать контейнеры в порядке, основанном на их зависимостях.

Вы не можете использовать их между файлами компоновки.

Вам нужно обработать это в потоке вашего приложения или написать сценарий точки входа для ваших контейнеров, который проверяет доступность вспомогательных служб, от которых зависит ваше приложение, перед запуском вашего приложения.

Ответ принят как подходящий

Вы не можете ссылаться на информацию из другого файла компоновки. «depend_on» должен быть сервисом, на который есть ссылка в том же файле.

Если вы пытаетесь запускать подразделы своего стека в компоновке, вы можете попробовать функцию «профилей» в docker compose. Файл компоновки по-прежнему будет большим, но вам не придется запускать все определенные службы одновременно.

Спасибо, профили выглядят полезными, и я посмотрю на них. Это, вероятно, распространенный сценарий, так что знаете ли вы, каковы лучшие практики в этом отношении? Являются ли профили обычным способом?

Asad Amir Khwaja 10.04.2023 08:16

@AsadAmirKhwaja Я не думаю, что существует множество лучших практик для профилей. Это довольно просто, вы просто группируете любые сервисы, которые хотите запускать вместе с профилем. Я не могу сказать, насколько это распространено по сравнению с несколькими файлами компоновки или пользовательскими сценариями bash, которые запускают контейнеры, но я думаю, что это лучшее решение для вашего случая, чем любой из них.

zja 13.04.2023 03:23

Другие вопросы по теме