Я пытаюсь развернуть веб-сайт с бэкэндом, разработанным в Django.Я установил два контейнера Docker, которые содержат экземпляр Django и экземпляр MySQL.Я также установил сеть между контейнерами, чтобы создать связь.Проблема в том, что когда я запускаю контейнер MySQL с параметром MYSQL_ROOT_PASSWORD, Django выдает мне следующую ошибку:
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 и устанавливаю пустой пароль в settings.py, он работает.
Здесь есть мой settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dbname',
'USER': 'username',
'PASSWORD': 'userpwd',
'HOST': 'db',
'PORT': '3306'
}
}
Вместо этого,это мой файл docker-compose.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:
Я застрял с этой ошибкой в течение нескольких дней.
Заранее спасибо.