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?
La tua domanda mi ha davvero trascurato con la mia configurazione docker :) – theDrifter