2016-08-04 5 views
0

Учитывая следующий Докер-compose.test.yml файл:Использование Postgres изображения в тесте

version: '2' 
services: 
    sut: 
    build: . 
    command: nosetests 
    environment: 
     - DJANGO_SETTINGS_MODULE=test.settings 
    links: 
     - db 
    db: 
    image: postgres 
    expose: 
     - 5432 

Построение SUT контейнер

docker-compose -f docker-compose.test.yml build sut 

Запуск контейнера:

[email protected]:~/github/djlobnek$ docker-compose -f docker-compose.test.yml run sut /bin/bash 
[email protected]:/djlobnek# psql -h localhost -U postgres 
psql: could not connect to server: Connection refused 
    Is the server running on host "localhost" (::1) and accepting 
    TCP/IP connections on port 5432? 
**could not connect to server: Connection refused** 
    Is the server running on host "localhost" (127.0.0.1) and accepting 
    TCP/IP connections on port 5432? 

ответ

1

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

while ! psql -h db -U postgres postgres -c 'select 1'; do 
    echo "waiting for database" 
    sleep 1 
done 

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

Перед тем, как попробовать это, это хорошая идея, чтобы убедиться в том, что контейнер Postgres фактически функционирует (например, путем ввода sut контейнер с docker exec и пытаться вручную подключиться с помощью psql).

Update

Попытка подключения к localhost внутри sut контейнера не будет работать (Postgres не запускается внутри этого контейнера). Вам нужно будет использовать имя хоста db, или вам понадобится IP-адрес контейнера db. Например:

postgres -h db -U postgres postgres 

Вы можете использовать localhost как имя хоста, если вы docker exec в самом db контейнера.

+0

Я подключаюсь непосредственно к слою sut используя {docker-compose -f docker-compose.test.yml run sut/bin/bash}. Я установил postgresql-client в файл docker. Запуск {psql -h localhost -U postgres} не увенчался успехом – tschm

+0

Действительно, узнал проблему localhost. Я действительно могу подключиться к контейнеру, и однажды я могу использовать psql для запуска командной строки postgres, например. thomas @ linuxclientlobnek01: ~/github/djlobnek $ docker-compose -p test -f docker-compose.test.yml run sut/bin/bash root @ 245ad3d10a9b:/djlobnek # psql -h db -U postgres ЭТО РАБОТАЕТ, однако ... – tschm

+0

Конечно, дело в том, чтобы автоматизировать это, и здесь я все еще сталкиваюсь с проблемами. Поэтому обратите внимание, насколько похожа моя команда: docker-compose -p test -f docker-compose.test.yml run sut. Здесь тесты терпят неудачу с тем же вышеупомянутым отказом подключения – tschm

Смежные вопросы