You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Django的Docker项目Windows可连PostgreSQL,Mac/Linux认证失败

问题:跨平台Docker Django连接PostgreSQL密码认证失败

这个问题已经困扰近一个月,具体情况如下:

  • 基于Django的Docker项目,在Windows机器上执行docker compose build和docker compose up后,项目正常运行,Django可完美连接PostgreSQL数据库,已在两台Windows机器验证。
  • 但在Mac或Linux机器上启动时,会出现connection failed: FATAL: password authentication failed for the user "postgres"错误。
  • 尝试将.env中的数据库凭证替换为AWS RDS实例的PostgreSQL信息,在Mac和Linux上可正常连接,推测问题可能与路径相关,但尚未找到解决方案。

相关配置文件

docker-compose.yml

version: '3.8'

services:
  web:
    container_name: targeting
    build: ./Targeting
    command: python manage.py runserver 0.0.0.0:80
    volumes:
      - ./:/usr/src/project/
    ports:
      - "80:80"

  db:
    env_file:
      - ./.env
    restart: always
    image: postgres
    container_name: postgres
    environment:
      - POSTGRES_DB=${NAME}
      - POSTGRES_USER=${USER}
      - POSTGRES_PASSWORD=${PASSWORD}
      - POSTGRES_PORT=${PORT}
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data/

  pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin4_container
    restart: always
    ports:
      - "8888:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: user-name@domain-name.com
      PGADMIN_DEFAULT_PASSWORD: strong-password
    volumes:
      - pgadmin-data:/var/lib/pgadmin

volumes:
  postgres_data:
  pgadmin-data:

.env

SECRET_KEY=random_secret_key
DEBUG=TRUE

NAME=postgres
USER=postgres
PASSWORD=password
HOST=db
PORT=5432

Python容器Dockerfile

# pull official base image
FROM python:3.11.4-slim-buster

# set work directory
WORKDIR /usr/src/project

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip
COPY ../requirements.txt .
RUN pip install -r requirements.txt

# copy project
COPY .. .

Django settings.py 数据库配置

from decouple import config

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": config('NAME'),
        "USER": config('USER'),
        "PASSWORD": config('PASSWORD'),
        "HOST": config('HOST'),
        "PORT": config('PORT')
    }
}

排查建议

  • 清理PostgreSQL持久化卷:Mac/Linux上可能残留旧的卷数据导致认证异常,执行docker compose down -v彻底删除所有卷,再重新构建启动。
  • 检查.env文件换行符:Windows默认CRLF格式,Mac/Linux用LF,可能导致环境变量读取错误。将.env转换为LF格式后重试。
  • 验证db容器环境变量:启动后进入db容器执行echo $POSTGRES_PASSWORD,确认密码是否与.env一致,命令:docker exec postgres echo $POSTGRES_PASSWORD
  • 调整Dockerfile路径:docker-compose中web服务的build上下文是./Targeting,Dockerfile里的COPY ../requirements.txt .属于跨目录拷贝,不同系统对相对路径解析可能有差异。建议将requirements.txt移到Targeting目录下,修改Dockerfile为COPY ./requirements.txt .和COPY . .。
  • 确认Django配置读取:在settings.py中临时添加print(config('PASSWORD')),启动后查看web容器日志,确认读取到的密码是否正确。

内容的提问来源于stack exchange,提问作者XzinkX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:24:55