2017-03-15 27 views
5

Dự án django của tôi không thể kết nối với vùng chứa cơ sở dữ liệu postgres. Tôi nên làm gì?Kết nối Django với postgres bằng docker-compose

Lỗi treo trên các lệnh python manage.py collectstatic --noinput && python manage.py makemigrations blog && python manage.py migrate. Tôi biết lệnh docker run tạo ra một vùng chứa mới nhưng tôi có nhiều lệnh hơn là một bằng bash trong docker-compose.yml. Nó sẽ hoạt động, phải không?

tôi 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" 

tôi 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 
    } 
} 

... 

Sản lượng docker-compose up --build:

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 

tôi sử dụng: Windows 10 Docker 17.03.0-ce-win1- (10.296) Docker-soạn phiên bản 1.11.2 Django == 1.10.6 psycopg2 == 2.7.1.

Cảm ơn bạn đã trả lời

Trả lời

6

Mỗi vùng chứa trong trình theo mặc định sẽ có tên máy chủ và IP riêng. Khi soạn thảo xoay các thùng chứa cho bạn, nó cũng đặt tất cả các vùng chứa trên mạng theo mặc định để cho phép phát hiện dựa trên DNS.

Điều này có nghĩa là cơ sở dữ liệu của bạn không thể truy cập được trên máy chủ cục bộ, nhưng bạn có thể truy cập nó bằng tên dịch vụ "db". Thay đổi dòng này trong settings.py của bạn:

'HOST': 'localhost', 

tới:

'HOST': 'db', 
+1

Vâng, đó là những gì tôi bỏ qua. Cảm ơn nhiều. – Jan

Các vấn đề liên quan