2017-03-15 35 views
5

Django projem, postgres veritabanı kapsayıcısına bağlanamıyor. Ne yapmam lazım?Docker-compose tarafından gönderilen postalara Django bağlantısı

python manage.py collectstatic --noinput && python manage.py makemigrations blog && python manage.py migrate numaralı komutlarda çöküyor. Docker çalıştırma komutunun yeni bir kap oluşturduğunu biliyorum ancak docker-compose.yml'deki bash tarafından tek komutum daha var. Çalışmalı, değil mi?

benim Dockerfile:

FROM python:3.6-alpine 
MAINTAINER Name <[email protected]> 

ENV PYTHONUNBUFFERED 1 
ENV INSTALL_PATH /heckblog 
RUN mkdir -p $INSTALL_PATH 

WORKDIR $INSTALL_PATH 


COPY requirements.txt requirements.txt 

# make available run pip install psycopg2 
RUN apk update && \ 
    apk add --virtual build-deps gcc python3-dev musl-dev && \ 
    apk add postgresql-dev 
RUN pip3 install -r requirements.txt 

# add bash into alpine linux 
RUN apk add --update bash && rm -rf /var/cache/apk/* 

COPY ./heckblog . 
#RUN pip install . 

CMD gunicorn -b 0.0.0.0:8000 --access-logfile - "config.wsgi:application" 

benim docker-compose.yml:

version: '2' 


services: 
    db: 
     image: postgres:alpine 
     environment: 
      POSTGRES_USER: blogdmin 
      POSTGRES_PASSWORD: password 
      POSTGRES_DB: heckblog 
      PGDATA: /tmp/pgdata 
     volumes: 
      - postgres_data:/tmp/pgdata 

    web: 
     build: . 
     command: > 
      bash -c "sleep 10 && 
      python manage.py collectstatic --noinput && 
      python manage.py makemigrations blog && 
      python manage.py migrate && 
      echo \"from django.contrib.auth.models import User; User.objects.create_superuser('admin', '[email protected]', 'pass')\" | python manage.py shell && 
      gunicorn -b 0.0.0.0:8000 --access-logfile - --reload \"config.wsgi:application\""     
     volumes: 
      - ./heckblog:/heckblog 
     depends_on: 
      - db 
     environment: 
      IN_DOCKER: 1 
     ports: 
      - "80:8000" 


volumes: 
    postgres_data: 

settings.py:

... 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'heckblog', 
     'USER': 'blogdmin', 
     'PASSWORD': 'password', 
     'HOST': 'localhost', 
     'PORT': '', # default port 
    } 
} 

... 

Çıktı docker-compose up --build ait:

web_1 |  TCP/IP connections on port 5432? 
web_1 | could not connect to server: Connection refused 
web_1 |  Is the server running on host "localhost" (127.0.0.1) and accepting 
web_1 |  TCP/IP connections on port 5432? 
web_1 | 
heckblog_web_1 exited with code 1 

kullandığım: Windows 10 Docker 17.03.0-ce-win1- (10296) liman işçisi-oluşturma sürüm 1.11.2 Django == 1.10.6 psycopg2 == 2.7.1. cevaplar

cevap

6

varsayılan olarak docker her kapsayıcı kendi hostname ve IP alır için

teşekkürler. Compose, kapsayıcıları sizin için döndürürken, aynı zamanda DNS tabanlı diske izin vermek için tüm kapsayıcıları varsayılan olarak bir ağa yerleştirir.

Bunun anlamı, veritabanınızın localhost'a ulaşılamamasıdır, ancak "db" hizmet adıyla ulaşabilirsiniz. sizin settings.py bu satırı değiştirin:

'HOST': 'localhost', 

için:

'HOST': 'db', 
+1

Evet, ben cevapsız budur. Çok teşekkür ederim. – Jan

İlgili konular