'django.db.utils.OperationalError: (1045, 'Plugin caching_sha2_password could not be

I'm trying to containerize my Django app with mysql and I get the following error when I try to run docker-compose up --build.

Successfully tagged drosmokers_web:latest
[+] Running 3/2
 ⠿ Network drosmokers_default  Created                                                                        0.1s
 ⠿ Container drosmokers-db-1   Created                                                                        0.3s
 ⠿ Container drosmokers-web-1  Created                                                                        0.1s
Attaching to drosmokers-db-1, drosmokers-web-1
drosmokers-db-1   | 2022-05-19 02:09:40+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.28-1debian10 started.
drosmokers-db-1   | 2022-05-19 02:09:40+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
drosmokers-db-1   | 2022-05-19 02:09:40+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.28-1debian10 started.
drosmokers-db-1   | 2022-05-19T02:09:40.450429Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.28) starting as process 1
drosmokers-db-1   | 2022-05-19T02:09:40.459416Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
drosmokers-db-1   | 2022-05-19T02:09:40.971548Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
drosmokers-db-1   | 2022-05-19T02:09:41.218218Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
drosmokers-db-1   | 2022-05-19T02:09:41.218279Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
drosmokers-db-1   | 2022-05-19T02:09:41.229850Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
drosmokers-db-1   | 2022-05-19T02:09:41.261835Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.28'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
drosmokers-db-1   | 2022-05-19T02:09:41.262088Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
drosmokers-web-1  | Watching for file changes with StatReloader
drosmokers-web-1  | Exception in thread django-main-thread:
drosmokers-web-1  | Traceback (most recent call last):
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 244, in ensure_connection
drosmokers-web-1  |     self.connect()
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
drosmokers-web-1  |     return func(*args, **kwargs)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 225, in connect
drosmokers-web-1  |     self.connection = self.get_new_connection(conn_params)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
drosmokers-web-1  |     return func(*args, **kwargs)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 244, in get_new_connection
drosmokers-web-1  |     connection = Database.connect(**conn_params)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/MySQLdb/__init__.py", line 123, in Connect
drosmokers-web-1  |     return Connection(*args, **kwargs)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/MySQLdb/connections.py", line 185, in __init__
drosmokers-web-1  |     super().__init__(*args, **kwargs2)
drosmokers-web-1  | MySQLdb._exceptions.OperationalError: (1045, 'Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory')
drosmokers-web-1  |
drosmokers-web-1  | The above exception was the direct cause of the following exception:
drosmokers-web-1  |
drosmokers-web-1  | Traceback (most recent call last):
drosmokers-web-1  |   File "/usr/local/lib/python3.9/threading.py", line 954, in _bootstrap_inner
drosmokers-web-1  |     self.run()
drosmokers-web-1  |   File "/usr/local/lib/python3.9/threading.py", line 892, in run
drosmokers-web-1  |     self._target(*self._args, **self._kwargs)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/utils/autoreload.py", line 64, in wrapper
drosmokers-web-1  |     fn(*args, **kwargs)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/runserver.py", line 137, in inner_run
drosmokers-web-1  |     self.check_migrations()
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 576, in check_migrations
drosmokers-web-1  |     executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/migrations/executor.py", line 18, in __init__
drosmokers-web-1  |     self.loader = MigrationLoader(self.connection)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/migrations/loader.py", line 58, in __init__
drosmokers-web-1  |     self.build_graph()
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/migrations/loader.py", line 235, in build_graph
drosmokers-web-1  |     self.applied_migrations = recorder.applied_migrations()
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/migrations/recorder.py", line 81, in applied_migrations
drosmokers-web-1  |     if self.has_table():
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/migrations/recorder.py", line 57, in has_table
drosmokers-web-1  |     with self.connection.cursor() as cursor:
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
drosmokers-web-1  |     return func(*args, **kwargs)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 284, in cursor
drosmokers-web-1  |     return self._cursor()
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 260, in _cursor
drosmokers-web-1  |     self.ensure_connection()
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
drosmokers-web-1  |     return func(*args, **kwargs)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 244, in ensure_connection
drosmokers-web-1  |     self.connect()
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/utils.py", line 91, in __exit__
drosmokers-web-1  |     raise dj_exc_value.with_traceback(traceback) from exc_value
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 244, in ensure_connection
drosmokers-web-1  |     self.connect()
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
drosmokers-web-1  |     return func(*args, **kwargs)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 225, in connect
drosmokers-web-1  |     self.connection = self.get_new_connection(conn_params)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
drosmokers-web-1  |     return func(*args, **kwargs)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 244, in get_new_connection
drosmokers-web-1  |     connection = Database.connect(**conn_params)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/MySQLdb/__init__.py", line 123, in Connect
drosmokers-web-1  |     return Connection(*args, **kwargs)
drosmokers-web-1  |   File "/usr/local/lib/python3.9/site-packages/MySQLdb/connections.py", line 185, in __init__
drosmokers-web-1  |     super().__init__(*args, **kwargs2)
drosmokers-web-1  | django.db.utils.OperationalError: (1045, 'Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/pl
ugin/caching_sha2_password.so: cannot open shared object file: No such file or directory')

Here is my docker-compose.yml:

version: '3.9'

services:
  db:
    image: mysql
    restart: always
    environment:
      - MYSQL_USER="dexter"
      - MYSQL_PASSWORD="password"
      - MYSQL_DATABASE="drosmokers_db"
      - MYSQL_ROOT_PASSWORD="password"
    volumes:
      - dev_vol:/var/lib/mysql/
    ports:
      - 3305:3306
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db

volumes:
  dev_vol:

My Dockerifle:

FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONBUFFERED=1
WORKDIR /app
COPY requirements.txt /app/
RUN pip install -r requirements.txt
COPY . /app/

...and finally my settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'drosmokers_db',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'drosmokers-db-1', # the container name
        'PORT': 3306
    }
}

I don't know why I'm getting this error and what this error means. I've been able to successfully containerize this app before, but I really was just following instructions, not really knowing what was going on with each command. I spent the last hour trying to figure out why running docker-compose up --build produces this error : django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on <database> (115), and now I get this error, and I don't even know what I did or where to start looking. Any help is greatly appreciated. Thanks!



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source