Django运行中的密码学错误

2024-04-29 07:23:51 发布

您现在位置:Python中文网/ 问答频道 /正文

Django正在尝试部署一个web站点的后端。我设置了两个Docker容器,其中包含一个Django实例和一个MySQL实例。我还设置了容器之间的网络,以便创建通信。问题是,当我使用MySQL_ROOT_PASSWORD Django参数启动MySQL容器时,会出现以下错误:

return Database.connect(**conn_params)
app    |   File "/usr/local/lib/python3.7/site-packages/pymysql/__init__.py", line 94, in Connect
app    |     return Connection(*args, **kwargs)
app    |   File "/usr/local/lib/python3.7/site-packages/pymysql/connections.py", line 325, in __init__
app    |     self.connect()
app    |   File "/usr/local/lib/python3.7/site-packages/pymysql/connections.py", line 599, in connect
app    |     self._request_authentication()
app    |   File "/usr/local/lib/python3.7/site-packages/pymysql/connections.py", line 882, in _request_authentication
app    |     auth_packet = _auth.caching_sha2_password_auth(self, auth_packet)
app    |   File "/usr/local/lib/python3.7/site-packages/pymysql/_auth.py", line 264, in caching_sha2_password_auth
app    |     data = sha2_rsa_encrypt(conn.password, conn.salt, conn.server_public_key)
app    |   File "/usr/local/lib/python3.7/site-packages/pymysql/_auth.py", line 142, in sha2_rsa_encrypt
app    |     raise RuntimeError("cryptography is required for sha256_password or caching_sha2_password")
app    | RuntimeError: cryptography is required for sha256_password or caching_sha2_password

我已经检查了3306端口是否在我的电脑上可用,是的。 另一方面,如果我用MySQL启动MySQL容器,则ALLOW_EMPTY_PASSWORD,并在设置.py,它起作用了。在

这是我的设置.py在

^{pr2}$

相反,这是我的码头工人-合成.yml文件

version: "3"
services:
  app:
    build:
      context: .
    container_name: app
    ports:
      - "8000:8000"
    networks:
      - backend_split
    depends_on:
      - db
    restart: always
    volumes:
      - ./app:/app
    command:
      sh -c "python manage.py runserver 0.0.0.0:8000"
  db:
    image: mysql
    container_name: db
    expose:
      - "3306"
    networks:
      - backend_split
    environment:
      - MYSQL_ROOT_PASSWORD=rootpwd
      - MYSQL_DATABASE=databasename
      - MYSQL_USER=username
      - MYSQL_PASSWORD=userpwd

networks:
  backend_split:

我已经被这个错误困扰了好几天了。在

提前谢谢你。在


Tags: inpyauthapplibpackagesusrlocal
1条回答
网友
1楼 · 发布于 2024-04-29 07:23:51

我自己解决了这个问题。我已经打开了各种各样的stackOverflow主题,但是什么都没有。我搜索了“pip-install-cryptography”,其中的技巧就在这里。 因此,在模拟Alpine环境的Docker中,解决方案是在Dockerfile中添加以下代码行:

RUN apk add gcc
RUN apk add  no-cache libressl-dev musl-dev libffi-dev
RUN pip install  no-cache-dir cryptography==2.1.4
RUN apk del libressl-dev \
        musl-dev \
        libffi-dev

还有。。。它跑了。在

相关问题 更多 >