2017-06-27 16 views
3

私は、ホストマシン上のデータベースを使用しようとしているdjangoプロジェクトを持つドッカー作成ファイルを持っています。docker container内からホスト上のpostgresデータベースにアクセスするには?

今私のDockerfileは次のとおりです。

FROM python:3-slim 

ENV PYTHONUNBUFFERED 1 

RUN mkdir /code. 
WORKDIR /code 
ADD . /code/ 
RUN pip install -r requirements.txt 
RUN export dockerhost=$(docker-machine ip) 

ドッキングウィンドウ-compose.yml:settings.pyで

version: "2" 

networks: 
    workernetwork: 
    webnetwork: 

services: 
    static: 
    volumes: 
     - /static:/static 
     - /media:/media 
    image: alpine:latest 

    web: 
    build: . 
    command: bash -c "SECRET_KEY=temp_value python /code/manage.py collectstatic --noinput && python /code/manage.py migrate && /code/run_gunicorn.sh" 
    volumes: 
     - .:/code 
    volumes_from: 
     - static 
    env_file: 
     - secrets.env 
    ports: 
     - 443:443 
    networks: 
     - webnetwork 
    extra_hosts: 
     - "dockerhost:${dockerhost}" 

DATABASES

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'revolution', 
     'USER': get_env_setting('POSTGRES_USER'), 
     'PASSWORD': get_env_setting('POSTGRES_PASSWORD'), 
     'HOST': 'dockerhost', 
     'PORT': 5432, 
    } 
} 

Imが間違っているのか?

注目のThx!

答えて

0

私は同じ問題がありました。問題は、接続がnetwrokの間にブロックされたということでした。ブリッジ名のネットワークを作成して修正しました。

私はFirewalとしてUFWを使用しています。私の作成したネットワークでpostegresポートへの接続が許可されました。

sudo ufw allow in on docker_webnetwork to any port 5432 

あなたは、ホストのIPアドレスを取得するには、あなたのホストのPostgreSQLの

に接続するためにwebnetworkを使用することができ、私が追加:

export DOCKERHOST=$(ip route | awk '/^default via /{print $3}') 

データベースにアクセスするために必要なサービスのコマンドで。

docker volume create --name=coredb 

ドッカー-compose.yml

version: "2" 

services: 
    ...  
    web: 
    build: 
     context: . 
    command: bash -c "python /code/manage.py collectstatic --noinput && python /code/manage.py migrate && /code/run_gunicorn.sh" 
    volumes: 
     - /static:/data/web/static 
     - /media:/data/web/media 
     - .:/code 
    env_file: 
     - ../.env 
    depends_on: 
     - db 
    db: 
    restart: always 
    image: postgres 
    env_file: 
     - ../.env 
    volumes: 
     - pgdata: /var/lib/postgresql/data 

volumes: 
    pgdata: 
    external: 
     name: coredb 

.env変数:

POSTGRES_DB={hidden} 
POSTGRES_USER={hidden} 
POSTGRES_PASSWORD={hidden} 

まず、ボリュームを作成するよう

:最後ドッカー体積で解決

関連する問題