Rails uygulamasına sahibim. Geliştirme ve test ortamlarında, Rails uygulamasının dockerized Postgres'e bağlanmasını istiyorum. Rails uygulamasının kendisi bir konteynerde olmayacak - sadece Postgres.Postgres Docker kabına bağlanmak için database.yml nasıl ayarlanır?
Benim database.yml neye benzemeli?
Çalışan bir docker default
makinem var.
postgres:
image: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_USER=timbuktu
- POSTGRES_PASSWORD=mysecretpassword
Ben Postgres çalıştıran almak için
docker-compose up
koştum: Ben liman işçisi-compose.yml yarattı.
Sonra Docker sanal makinenin IP adresini almak için
docker-machine ip default
yapıyorduk, ben buna göre database.yml güncelleme:
...
development:
adapter: postgresql
host: 192.168.99.100
port: 5432
database: timbuktu_development
username: timbuktu
password: mysecretpassword
encoding: unicode
pool: 5
...
Bu nedenle tüm iyi ve ben de onun kap içinde Postgres bağlanabilirsiniz.
Ancak, bir başkası repoyu çekerse, onlar Docker varsayılan makinesinin IP adresi benimkilerden farklı olacağından, database.yml kullanarak Postgres'e bağlanamayacaklar.
Bunu yapmak için database.yml'imi nasıl değiştirebilirim?
Sahip olduğum tek bir fikir, Docker varsayılan makinelerinin IP adresini docker-machine env default
çalıştırarak ve env DOCKER_HOST satırını bash_rc'ye yapıştırarak almalarını istemektir. Örneğin,
export DOCKER_HOST="tcp://192.168.99.100:2376"
Sonra database.yml konak hattını
host: <%= ENV['DOCKER_HOST'].match(/tcp:\/\/(.+):\d{3,}/)[1] %>
içerebilir Ama bu çirkin ve hacky hissediyor. Daha iyi bir yolu var mı?
Sorunuz, docker kurulumumda beni çok eğitti :) – theDrifter