Как открыть Docker-контейнер для доступа к базе данных хоста? - PullRequest
0 голосов
/ 01 мая 2019

В настоящее время я пытаюсь выяснить , как настроить мой docker-compose.yml, чтобы веб-сервер (django) мог обмениваться данными с базой данных PostgreSQL, работающей на хост-компьютере.

Приложение отлично работает вне контейнера.

А теперь я хочу создать контейнер для улучшения возможностей управления и развертывания.

Я пробовал это,
docker-compose.yml :

version: '3'

services:
  web:
    image: myimage
    volumes:
      - .:/appdir
    environment:
      - DB_NAME=test
      - DB_USER=test
      - DB_PASSWORD=test
      - DB_HOST=localhost
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    networks:
      - mynet
networks:
  mynet:

Dockerfile :

FROM python:3

ENV PYTHONUNBUFFERED=1 \
    DJANGO_SETTINGS_MODULE=app.settings \
    DEBUG=True \
    SECRET_KEY=akey

WORKDIR /appdir

COPY . /appdir

EXPOSE 8000

RUN pip install -r requirements.txt

Но когда я это делаю, я получаю следующую ошибку:

web_1  | django.db.utils.OperationalError: 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?

Спасибо

1 Ответ

0 голосов
/ 01 мая 2019

localhost относительно - внутри контейнера докера - localhost (он же 127.0.0.1) ссылается на сам контейнер. если вы хотите подключиться к вашему хосту, укажите для вашего хоста реальный ip как DB_HOST.

Есть много способов найти ваш ip хоста, например: запустить в своем терминале hostname -I | awk '{print $1}'

...