LINUX.ORG.RU

docker-compose link на этапе build

 


0

1

Хочется иметь два docker контейнера.
Один postgresql, второй c моей программой (game)
Но хочется сделать так что бы пользователей в БД создавал контейнер game. Есть вот такой конфиг:

postgres:                                                                                                                                                
    name: test                                                                                                                                           
    hostname: post                                                                                                                                       
    build: postgres                                                                                                                                      
    ports:                                                                                                                                               
     - "5432:5432"                                                                                                                                       
                                                                                                                                                         
game:                                                                                                                                                   
    build: game                                                                                                                                         
    links:                                                                                                                                               
     - "postgres:postgres"
В dockerfile game есть такие строчки
RUN psql -h postgres -U postgres --command "CREATE USER game WITH PASSWORD 'owner';"
и приложение при билде падает с ошибкой что не может разрезолвит host с именем postgresql. при этом если закоментить эту строчку и потом подключится к контейнеру и выполнить ее вручную, то все работает.
Такое поведение я так понимаю из-за того что на этапе build еще нету связи между контейнерами


Но хочется сделать так что бы пользователей в БД создавал контейнер game.
В dockerfile game есть такие строчки

Это не контейнер game создает, а билдер во время сборки образа.

Причину ты понял правильно. И я не вижу причин во-первых делать такую сложную связанность образов, во-вторых не использовать volume для хранения данных и настроек БД. Правильный способ – в контейнере запускать только процесс БД, данные подтягивать с хоста.

staseg ★★★★★
()
Ответ на: комментарий от staseg

И я не вижу причин во-первых делать такую сложную связанность образов

Например я захочу подключить еще один контейнер которому нужна БД.
И если пользователей будет создавать контенер с БД мне придется его перебилдеть и запустить.
А если пользователей будет создаваться в новом контейнере, то мне достаточно сбилдеть только его.

n4ela
() автор топика
Ответ на: комментарий от n4ela

А, я понял. Ну, очевидно, что это не задача dockerfile (на этапе сборки образа). Самый кошерный способ, я думаю, делать этот вызов из game's ENTRYPOINT (этап запуска контейнера).

staseg ★★★★★
()
Последнее исправление: staseg (всего исправлений: 1)
Ответ на: комментарий от staseg

Сделал через ENTRYPOINT все работает как надо, спасибо.
Меня только один момент смущает, в контейнере с БД пришлось прописать доступ от любого ip, и деплоить такую вещь на боевой сервак не хочется.
Когда БД и приложение работало без всяких докеров и виртуализации, там все обращения по localhost шли.

n4ela
() автор топика
Ответ на: комментарий от n4ela

ЕМНИП контейнеры запускаются в какой-то виртуальной подсети, открой доступ по маске. Или придумывай какую-то динамическую конфигурацию.

staseg ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.