如何将Ubuntu 20.04本地PostgreSQL连接至Docker内的Django项目
连接Docker中的Django到Ubuntu本地PostgreSQL数据库
1. 调整docker-compose.yml配置
删除原配置中的kapediadb服务块,同时移除kapedia服务里的depends_on依赖项——因为不再需要容器内的PostgreSQL实例。修改后的配置如下:
version: '3.3' services: kapedia: restart: always container_name: kapedia command: - /bin/bash - -c - | python manage.py makemigrations accounts python manage.py makemigrations posts python manage.py makemigrations quiz python manage.py migrate gunicorn kapedia.wsgi:application --bind 0.0.0.0:8000 image: kapedia build: . volumes: - .:/kapedia ports: - "8000:8000" env_file: - .env volumes: static:
2. 配置本地PostgreSQL允许Docker容器访问
2.1 修改访问控制规则
找到Ubuntu系统中PostgreSQL的pg_hba.conf文件(路径通常为/etc/postgresql/<你的PostgreSQL版本>/main/pg_hba.conf),添加一条允许Docker网段访问的规则:
host <你的数据库名称> <数据库用户名> 172.17.0.0/16 scram-sha-256
若为测试环境,可使用更宽松的规则(不建议生产环境):
host all all 172.17.0.0/16 scram-sha-256
2.2 设置PostgreSQL监听地址
打开postgresql.conf(同目录下),修改listen_addresses参数,允许外部访问:
listen_addresses = '*'
生产环境可指定宿主机IP或Docker网关IP(如172.17.0.1)以提升安全性。
2.3 重启PostgreSQL服务
执行命令使配置生效:
sudo systemctl restart postgresql
3. 更新数据库连接环境变量
修改.env文件中的数据库参数,指向本地PostgreSQL实例:
DB_NAME=你的本地数据库名 DB_USER=你的本地数据库用户名 DB_PASSWORD=你的本地数据库密码 DB_HOST=host.docker.internal # Docker内置的宿主机别名,自动映射到宿主机IP # 也可直接使用宿主机的局域网IP或Docker网关IP(172.17.0.1) DB_PORT=5432
4. 确认Django数据库配置
确保Django的settings.py正确读取上述环境变量,示例配置如下:
import os DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': os.getenv('DB_NAME'), 'USER': os.getenv('DB_USER'), 'PASSWORD': os.getenv('DB_PASSWORD'), 'HOST': os.getenv('DB_HOST'), 'PORT': os.getenv('DB_PORT'), } }
完成以上步骤后,重新启动Docker容器即可连接到本地PostgreSQL数据库。
内容的提问来源于stack exchange,提问作者Hom Prasad Dhakal
相关产品推荐
相关产品推荐

