I have a django app connecting to mysql. I also use nginx for srving static files. My django app can't connect to mysql that's inside docker. I use docker compose to connect these 3 containers. But when i run docker compose up command i get this error. I use python:3.9-slim-buster image for django app. I already tried chaning it to python:3.9 but nothing has changed.
Docker compose file
version: '3.8'
services:
django:
build: .
volumes:
- static:/static
- media:/media
ports:
- 8000:8000
networks:
- database
environment:
DB_HOST: db
depends_on:
- db
nginx:
build: ./nginx
ports:
- 80:80
volumes:
- static:/static
depends_on:
- django
db:
image: mysql:8.0.25
command: '--default-authentication-plugin=mysql_native_password'
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: ecommerce
networks:
- database
volumes:
- db:/var/lib/mysql
volumes:
static:
media:
db:
networks:
database:
Error:
Traceback (most recent call last):
django_1 | File "/app/manage.py", line 22, in <module>
django_1 | main()
django_1 | File "/app/manage.py", line 18, in main
django_1 | execute_from_command_line(sys.argv)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
django_1 | utility.execute()
django_1 | File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 413, in execute
django_1 | self.fetch_command(subcommand).run_from_argv(self.argv)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 354, in run_from_argv
django_1 | self.execute(*args, **cmd_options)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 398, in execute
django_1 | output = self.handle(*args, **options)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 89, in wrapped
django_1 | res = handle_func(*args, **kwargs)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/migrate.py", line 75, in handle
django_1 | self.check(databases=[database])
django_1 | File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 419, in check
django_1 | all_issues = checks.run_checks(
django_1 | File "/usr/local/lib/python3.9/site-packages/django/core/checks/registry.py", line 76, in run_checks
django_1 | new_errors = check(app_configs=app_configs, databases=databases)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/core/checks/model_checks.py", line 34, in check_all_models
django_1 | errors.extend(model.check(**kwargs))
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/base.py", line 1290, in check
django_1 | *cls._check_indexes(databases),
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/base.py", line 1696, in _check_indexes
django_1 | connection.features.supports_expression_indexes or
django_1 | File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 48, in __get__
django_1 | res = instance.__dict__[self.name] = self.func(instance)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/features.py", line 240, in supports_expression_indexes
django_1 | not self.connection.mysql_is_mariadb and
django_1 | File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 48, in __get__
django_1 | res = instance.__dict__[self.name] = self.func(instance)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 401, in mysql_is_mariadb
django_1 | return 'mariadb' in self.mysql_server_info.lower()
django_1 | File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 48, in __get__
django_1 | res = instance.__dict__[self.name] = self.func(instance)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 390, in mysql_server_info
django_1 | return self.mysql_server_data['version']
django_1 | File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 48, in __get__
django_1 | res = instance.__dict__[self.name] = self.func(instance)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 366, in mysql_server_data
django_1 | with self.temporary_connection() as cursor:
django_1 | File "/usr/local/lib/python3.9/contextlib.py", line 117, in __enter__
django_1 | return next(self.gen)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 603, in temporary_connection
django_1 | with self.cursor() as cursor:
django_1 | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
django_1 | return func(*args, **kwargs)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 259, in cursor
django_1 | return self._cursor()
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 235, in _cursor
django_1 | self.ensure_connection()
django_1 | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
django_1 | return func(*args, **kwargs)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
django_1 | self.connect()
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
django_1 | raise dj_exc_value.with_traceback(traceback) from exc_value
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
django_1 | self.connect()
django_1 | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
django_1 | return func(*args, **kwargs)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect
django_1 | self.connection = self.get_new_connection(conn_params)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
django_1 | return func(*args, **kwargs)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 234, in get_new_connection
django_1 | connection = Database.connect(**conn_params)
django_1 | File "/usr/local/lib/python3.9/site-packages/MySQLdb/__init__.py", line 130, in Connect
django_1 | return Connection(*args, **kwargs)
django_1 | File "/usr/local/lib/python3.9/site-packages/MySQLdb/connections.py", line 185, in __init__
django_1 | super().__init__(*args, **kwargs2)
django_1 | django.db.utils.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')