我开发了一个通过电子邮件发送验证码的 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:
尝试将
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: