Запускайте док-сервер зависимый_контроллер, только если он не запущен - PullRequest
1 голос
/ 10 июля 2019

У меня есть служба, которая работает в докере. По причинам Я хочу запустить набор тестов параллельно, например, интеграционные тесты и тесты производительности.

У меня есть docker-compose.yaml, который выглядит так:

# My service - the thing under test in this scenario
service: 
  ports: 
    - 4000:4000
  ...

# Integration tests
integration:
  depends_on:
    - service
  ...


# Performance tests
performance:
  depends_on:
    - service
  ...

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

Невозможно запустить службу сервиса ... 0.0.0.0:4000 не удалось: порт уже используется.

Это потому, что docker-compose пытается запустить службу для каждого из тестов. Можно ли сказать, что docker-compose использует тот же экземпляр службы? Есть ли лучший способ добиться таких же результатов?

1 Ответ

0 голосов
/ 11 июля 2019

Я решил это для себя и запишу здесь для всех, кто столкнется с подобной проблемой в будущем.

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

Docker-compose.yaml теперь будет выглядеть примерно так:

service:
  # no ports declaration
  ...

integration:
  depends_on:
    - service
  environment:
    - SERVICE_URL=http://service:4000
  ...

performance:
  depends_on:
    - service
  environment:
    - SERVICE_URL=http://service:4000
  ...

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

docker-compose run -p 4000:4000 service
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...