如何公开一个Docker容器访问主机数据库?

时间:2019-05-01 09:58:30

标签: django database docker docker-compose

我目前正在尝试如何配置docker-compose.yml以允许Web服务器(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 :(得分:0)

localhost是相对的-在docker容器内部-localhost(aka 127.0.0.1)是指容器本身。如果要连接到主机,请给容器您的主机真实IP作为DB_HOST

有很多找到主机IP的方法,例如: 在您的终端hostname -I | awk '{print $1}'

中运行