У меня есть приложение Rails. В среде разработки и тестирования я хочу, чтобы приложение Rails подключилось к докционированным Postgres. Само приложение Rails не будет в контейнере, а просто Postgres.Как настроить database.yml для подключения к контейнеру Postgres Docker?
Каким должен быть мой database.yml?
У меня есть докер default
машина работает. Я создал Докер-compose.yml:
postgres:
image: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_USER=timbuktu
- POSTGRES_PASSWORD=mysecretpassword
Я выбежала docker-compose up
получить Postgres работает.
Тогда я побежал docker-machine ip default
, чтобы получить IP-адрес виртуальной машины Докер, и я обновил database.yml соответственно:
...
development:
adapter: postgresql
host: 192.168.99.100
port: 5432
database: timbuktu_development
username: timbuktu
password: mysecretpassword
encoding: unicode
pool: 5
...
Так что все хорошо, и я могу подключиться к Postgres в контейнере.
Но, если кто-то еще тянет репо, они не смогут подключиться к Postgres, используя мою базу данных.yml, потому что IP-адрес их машины Docker по умолчанию будет отличаться от моего.
Так как я могу изменить свою базу данных.yml для этого?
Одна из моих идей - попросить их получить IP-адрес своей машины Docker по умолчанию, запустив docker-machine env default
и вставив строку ENV DOCKER_HOST в свой bash_rc. Например,
export DOCKER_HOST="tcp://192.168.99.100:2376"
Тогда мой database.yml хозяин может включать в себя линию
host: <%= ENV['DOCKER_HOST'].match(/tcp:\/\/(.+):\d{3,}/)[1] %>
Но это чувствует себя некрасиво и Hacky. Есть ли способ лучше?
Ваш вопрос действительно подтолкнул меня к настройке докеры :) – theDrifter