Django 无法使用 Docker 通过 gmail smtp 发送电子邮件,无需 docker 即可工作

问题描述 投票:0回答:1

我开发了一个通过电子邮件发送验证码的 Django 应用程序。 当 我使用 PyCharm 等在本地运行代码时,我的代码可以工作并且正在发送电子邮件。

然后我想使用 Docker 来构建我的应用程序。我做到了,但除了发送电子邮件之外一切正常。执行 email.send() 时,出现以下错误:[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书链中的自签名证书 (_ssl.c:1002)。 我在家里使用私人网络。 587端口没有被屏蔽。

这是我的 DockerFile

FROM python:3.11.4-slim-buster

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install system dependencies
RUN apt-get update \
    && apt-get -y install libpq-dev gcc \
    && pip install psycopg2

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

# copy main.sh
COPY ./main.sh .
RUN sed -i 's/\r$//g' /usr/src/app/main.sh
RUN chmod +x /usr/src/app/main.sh

# copy project
COPY . .

# run main.sh
ENTRYPOINT ["/usr/src/app/main.sh"]

这是 docker-compose.yml

version: '3.9'

services:
  backend:
    build:
      context: ./backend
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
      - 587:587
    volumes:
      - ./backend/:/usr/src/app/
    environment:
      - DB_NAME=db_name
      - DB_USER=db_user
      - DB_PASSWORD=db_pass
      - DB_HOST=db
      - DB_PORT=5432
      - EMAIL_USE_TLS=True
      - [email protected]
      - EMAIL_HOST=smtp.gmail.com
      - [email protected]
      - EMAIL_HOST_PASSWORD=password
      - EMAIL_PORT=587
    depends_on:
      - db


  db:
    restart: always
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_DB=db
      - POSTGRES_USER=db_user
      - POSTGRES_PASSWORD=db_pass

volumes:
  postgres_data:
django docker smtp gmail
1个回答
1
投票

尝试将

network-mode
添加到
host
,如此处

所述
version: '3.9'

services:
  backend:
    build:
      context: ./backend
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
    volumes:
      - ./backend/:/usr/src/app/
    network_mode: "host"
    environment:
      - DB_NAME=db_name
      - DB_USER=db_user
      - DB_PASSWORD=db_pass
      - DB_HOST=db
      - DB_PORT=5432
      - EMAIL_USE_TLS=True
      - [email protected]
      - EMAIL_HOST=smtp.gmail.com
      - [email protected]
      - EMAIL_HOST_PASSWORD=pass
      - EMAIL_PORT=587
    depends_on:
      - db


  db:
    restart: always
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_DB=db
      - POSTGRES_USER=db_user
      - POSTGRES_PASSWORD=db_pass

volumes:
  postgres_data:
© www.soinside.com 2019 - 2024. All rights reserved.