Вы столкнулись с разницей в том, как сеть обрабатывается в Docker Executor и Kubernetes Executor.
Исполнитель Docker работает почти как docker-compose
, поднимая все ваши контейнеры в одной сети. Каждый контейнер получает IP, и создается DNS : если ваша служба имеет имя postgres
, команда nc postgres
разрешит IP-адрес контейнера postgres и свяжется с ним (например, 172.17.0.15:5432
).
Исполнитель kubernetes создаст бегунка. Все ваши контейнеры будут запущены в одном модуле с одним IP-адресом. Сеть между контейнерами в одном модуле осуществляется путем связи с 127.0.0.1
. Если вы хотите связаться с контейнером postgres, вы, вероятно, захотите связаться с 127.0.0.1:5432
. Так что если вы используете 127.0.0.1
вместо postgres
, это должно сработать.
Чтобы ваш конвейер работал на обоих исполнителей, вы можете:
- Определите, какой тип бегуна вы используете теги бегуна
$CI_RUNNER_TAGS
- Определите пользовательскую переменную
$POSTGRES_URL
для всех ваших исполнителей
- Попробуйте разрешить
postgres
и вернуться к 127.0.0.1