2015-10-11 19 views
5

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ı?

+0

Sorunuz, docker kurulumumda beni çok eğitti :) – theDrifter

cevap

3
Önce bir doğru ortam değişkeni ayarlayabilirsiniz

ve access it from your database.yml: (bash substring removal kullanarak) gibi bir bashrc ile

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

:

host: <%= `docker-machine ip default` %> 
: Ben daha basit bir yolunu bulmuş
export DOCKER_HOST=$(docker-machine env default) 
export POSTGRES_IP=${DOCKER_HOST#tcp://} 
3

+0

Ben de çalışıyorum, sadece konfigürasyon değerini (ortam değişkenini) * nasıl * bu değerin edinildiğini/ayarlandığını ayırmayı tercih ediyorum. Yine de, +1. – VonC

+0

veya 'host: <% = ENV ['POSTGRES_IP'] || \ 'docker-makine ip varsayılan \ '%>' – juanpastas

İlgili konular