2015-10-11 14 views
5

Ho un'app Rails. Negli ambienti di sviluppo e test, voglio che l'app Rails si connetta a Postgres ancorati. L'app Rails non sarà in un contenitore, ma solo Postgres.Come configurare database.yml per connettersi al contenitore Dockgre Postgres?

Che aspetto dovrebbe avere il mio database.yml?

Ho una macchina mobile default in esecuzione. Ho creato finestra mobile-compose.yml:

postgres: 
    image: postgres 
    ports: 
    - "5432:5432" 
    environment: 
    - POSTGRES_USER=timbuktu 
    - POSTGRES_PASSWORD=mysecretpassword 

ho corse docker-compose up per ottenere Postgres in esecuzione.

Poi ho corse docker-machine ip default per ottenere l'indirizzo IP della macchina virtuale Docker, e ho aggiornato database.yml di conseguenza:

... 
development: 
    adapter: postgresql 
    host: 192.168.99.100 
    port: 5432 
    database: timbuktu_development 
    username: timbuktu 
    password: mysecretpassword 
    encoding: unicode 
    pool: 5 
... 

Quindi tutto va bene e posso collegarmi al Postgres nel suo contenitore.

Ma, se qualcun altro preleva il repository, non potranno collegarsi a Postgres usando il mio database.yml, perché l'indirizzo IP del loro computer predefinito Docker sarà diverso dal mio.

Quindi, come posso modificare il mio database.yml per tenere conto di questo?

Un'idea che ho è di chiedere loro di ottenere l'indirizzo IP del loro computer predefinito Docker eseguendo docker-machine env default e incollando la riga ENV DOCKER_HOST nel proprio bash_rc. Ad esempio,

export DOCKER_HOST="tcp://192.168.99.100:2376" 

Poi il mio ospite database.yml possono includere la linea

host: <%= ENV['DOCKER_HOST'].match(/tcp:\/\/(.+):\d{3,}/)[1] %> 

Ma questo si sente brutta e hacky. C'è un modo migliore?

+0

La tua domanda mi ha davvero trascurato con la mia configurazione docker :) – theDrifter

risposta

3

ho trovato un modo più semplice:

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

Che dovrebbe lavoro anche io, preferisco semplicemente separare il valore di configurazione (variabile di ambiente) da * come * quel valore viene acquisito/impostato. Ancora, +1. – VonC

+0

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

Problemi correlati