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

标签 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?

谢谢

最佳答案

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

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

关于django - 如何公开一个Docker容器访问主机数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55934504/

相关文章:

django - 将 API 从 CodeIgniter 迁移到 Django 的最佳方法

docker - 无法在heroku上部署ASP.netcore 3.1 dockerized应用,但容器可在本地运行

linux - Kubernetes:无法安装仪表板

php - 迁移网站 - 在迁移过程中保持数据库同步

database - sqlite 数据库查询出现问题,不同的查询不起作用

docker - ECS Fargate/单个ALB/多个Docker容器

python - 如何在 Django 模板中包含图像文件?

Django - 管理中的外键字段初始值定义

Django 如何以模型形式保存 url 中的图像?

java - 数据库仅返回最后一个数据库项