2017-03-15 16 views
5

私のdjangoプロジェクトはpostgresデータベースコンテナに接続できません。私は何をすべきか?djangoとpostgresの接続をdocker-compose

コマンドpython manage.py collectstatic --noinput && python manage.py makemigrations blog && python manage.py migrateでクラッシュします。 私はdocker runコマンドが新しいコンテナを作成することを知っていますが、docker-compose.ymlにbashによって というコマンドが追加されています。それはうまくいくはずですね。

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" 

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 
    } 
} 

... 

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 
私が使用

: のWindows 10 ドッカー17.03.0-CE-win1-(10296) ドッキングウィンドウ・コンバージョン1.11.2 ジャンゴ== 1.10.6 psycopg2の== 2.7.1。デフォルトで

答え

答えて

6

してくれてありがとうドッキングウィンドウ内の各コンテナは、独自のホスト名とIPアドレスを取得します。作成すると、コンテナをスピンアップすると、すべてのコンテナがデフォルトでネットワーク上に配置され、DNSベースの検出が許可されます。

これは、データベースがローカルホストに到達できないが、サービス名 "db"でアクセスできることを意味します。あなたのsettings.pyにこの行を変更します。

'HOST': 'localhost', 

へ:

'HOST': 'db', 
+1

はい、それは私が逃したものです。どうもありがとうございました。 – Jan

関連する問題