2015-10-11 2 views
5

У меня есть приложение 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. Есть ли способ лучше?

+0

Ваш вопрос действительно подтолкнул меня к настройке докеры :) – theDrifter

ответ

3

Вы можете установить правильную переменную окружения первого и access it from your database.yml:

host: <%= ENV['POSTGRES_IP'] %> 

С Bashrc, как (с помощью bash substring removal):

export DOCKER_HOST=$(docker-machine env default) 
export POSTGRES_IP=${DOCKER_HOST#tcp://} 
3

Я нашел более простой способ:

host: <%= `docker-machine ip default` %> 
+0

Это должно работа тоже, я просто предпочитаю отделять значение конфигурации (переменную среды) от * how *, которое приобретается/устанавливается. Тем не менее, +1. – VonC

+0

или 'host: <% = ENV ['POSTGRES_IP'] || \ 'docker-machine ip default \'%> ' – juanpastas

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