Docker’da karşılaştığım problemler ve çözümleri
docker-compose’da postgres environment variable tanımlamak
POSTGRES_USER ve POSTGRES_PASSWORD yazılırken tırnak kullanılmaz. Çevre değişkenlerinin sırası da yerine göre önem arz edebilir. Örnek bir servis yazalım,
db:
image: postgres
environment:
- POSTGRES_DB=database_name
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=1234
- POSTGRES_HOST=127.0.0.1
Django Settings’te Host tanımlaması
Eğer Django ile beraber kullandığımız veritabanını da dockerize etmişsek Django ayarlarında dikkat etmemiz gereken bir durum var. settings.py içerisindeki HOST alanına docker kullanmadan olduğu gibi “localhost” yazdığımızda Django veritabanına bağlanamayacaktır. Sebebi, konteynırların ayağa kalktıktan sonra Docker’ın içerisindeki network’ü kullanmalarıdır. Her konteynır kendisini bir bilgisayar zannettiğinden, localhost’u gördüğü zaman aynı konteynır içerisindeki bir servisi arar ve doğal olarak bulamaz zira veritabanı sunucusu başka bir konteynırın içerisindedir.
Burada yapmamız gereken host’u localhost olarak değil başka bir docker konteynırını işaret edecek şekilde ayarlamak. Bunu yapmak ise gayet basit , ** settings.py içerisindeki HOST alanına docker-compose.yml dosyası içerisindeki servis tanımlarında veritabanı servisine verdiğimiz ismi yazıyoruz. **
Hemen örnek docker-compose ve settings.py konfigürasyonlarını aşağıya yazalım ;
docker-compose.yml :
services:
db: # <----- Veritabanını servisini db ismiyle oluşturduk.
image: postgres
environment:
- POSTGRES_DB=database_name
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=1234
- POSTGRES_HOST=127.0.0.1
DATABASES = {
'default': {
'ENGINE':'django.db.backends.postgresql',
'NAME':'database_name',
'USER':'postgres',
'PASSWORD':'1234',
'PORT' : 5432,
'HOST': 'db', # <------- docker-compose.yaml içerisindeki veritabanı servisinin ismini yazdık.
'ATOMIC_REQUESTS': True,
},
}
Leave a comment