2017-01-26 11 views
0

Я создаю файл Docker для приложения, которое подключается к контейнеру postgres внутри той же сети докеров. Для заполнения базы данных, внутри Dockerfile я сначала установить клиент Postgres и все зависимости, а затем попытаться выполнить SQL дамп, как это:Ошибка при создании изображения докеров при попытке импорта sql-дампа в контейнер postgres

RUN apt-get install python python-dev libpq-dev postgresql-client 
RUN psql -h $SQL_HOST -U $SQL_USER -W $SQL_DB < some_dump.sql 

Я получаю эту ошибку:

The command '/bin/sh -c psql -h $SQL_HOST -U $SQL_USER -W $SQL_DB < some_dump.sql' returned a non-zero code: 2 

Переменная $ SQL_HOST имеет имя контейнера докера, и я могу ping postgres без проблем.

Когда я вручную настроить контейнер, я могу выполнить без проблем следующее:

psql -h $SQL_HOST -U $SQL_USER 
postgres=# 

Или даже так:

/bin/sh 
> psql -h $SQL_HOST -U $SQL_USER 
postgres=# 

Но я получаю сообщение об ошибке при попытке подключиться к Postgres (я предполагаю, что) способ докер делает при создании образа:

/bin/sh -c psql -h $SQL_HOST -U $SQL_USER 

сообщение об ошибке:

psql: could not connect to server: No such file or directory 
Is the server running locally and accepting 
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 

Любые идеи, почему я получаю эту ошибку? Мои догадки состояли в том, что env vars не были доступны в оболочке/bin/sh, но это не тот случай. Я даже pinged postgres внутри оболочки/bin/sh и преуспел.

ответ

0

Было довольно очевидно, что докер не может идентифицировать хосты других контейнеров при создании изображения, пока вы не выполните команду docker run --net <network>, с которой вы можете общаться с другими контейнерами.