Невозможно подключиться к сервису Postgres, используя docker и tox - PullRequest
0 голосов
/ 03 мая 2019

У меня есть приложение-докер, которое создает базу данных Postgres.Я использую токсины для запуска моих тестов Django.Когда я запускаю docker-compose run web tox поверх моего образа докера на локальном компьютере (я использовал docker-compose up --build --force-recreate -d для создания образа докера), он выдает ошибку как:

E       django.db.utils.OperationalError: could not connect to server:                     
        Connection refused
E       Is the server running on host "127.0.0.1" and accepting
E       TCP/IP connections on port 5432?

Но когдаЯ запускаю единственную команду tox (не на моем образе докера), она работает нормально.

Я попытался запустить тест Django без токсикоза, используя docker-compose run web python manage.py test поверх моего образа докера.В этом случае он не показывает никаких ошибок.Думаю, у меня возникли проблемы с запуском токсика по образу докера.

1 Ответ

1 голос
/ 03 мая 2019

Это, вероятно, вызвано общеизвестным фактом, что тестовый контейнер запускается до того, как контейнер БД полностью функционирует. Несмотря на то, что вы установили в docker, compose зависимости / ссылка, docker ожидает только того, что зависимый контейнер будет активен. Если инициализация БД занимает, скажем, 30 секунд, перед этим будет запущен второй контейнер, и вы увидите эту проблему.

Решение состоит в том, чтобы поместить во второй контейнер некоторый bash-скрипт, который будет пинговать порт БД, чтобы заставить его ждать, пока БД не будет готова. Проверьте SO, есть несколько похожих вопросов с некоторыми хорошими решениями, как заставить второй контейнер ждать зависимую БД.

...