基于Docker部署Django应用无法连接PostgreSQL数据库求助
解决Docker中Django无法解析PostgreSQL主机名"db"的问题
以下是几个针对性的排查和解决步骤:
确保容器在同一个网络中
docker-compose run默认会创建临时网络,而非项目默认的服务网络,这会导致web容器无法解析db容器的主机名。运行命令时指定项目网络即可:docker-compose run --rm --network $(basename $(pwd)_default) web <你的命令>或者先启动db服务,再用
docker-compose exec执行命令(需容器处于运行状态):docker-compose up -d db docker-compose exec web <你的命令>验证db服务是否正常启动
先单独启动db服务并查看日志,确认PostgreSQL初始化完成且无错误:docker-compose up -d db docker-compose logs db日志中出现
database system is ready to accept connections才算启动成功。确认环境变量正确传递到web容器
进入web容器查看环境变量是否正确设置:docker-compose run --rm web env | grep DATABASE_HOST确保输出结果是
db,同时检查Django的settings.py中是否正确读取该变量,比如:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': os.getenv('DATABASE_NAME'), 'USER': os.getenv('DATABASE_USER'), 'PASSWORD': os.getenv('DATABASE_PASSWORD'), 'HOST': os.getenv('DATABASE_HOST', 'db'), 'PORT': os.getenv('DATABASE_PORT', '5432'), } }重启Docker服务修复DNS问题
如果以上步骤都没问题,可能是Docker DNS缓存异常,重启Docker服务尝试:# Linux sudo systemctl restart docker # macOS brew services restart docker # Windows (PowerShell) Restart-Service Docker
内容的提问来源于stack exchange,提问作者Bruno Peixoto
相关产品推荐
相关产品推荐

