'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 |
|---|
