如何将一个容器中的mysql数据库绑定到另一个运行我的django博客应用程序的容器(使用docker compose)

0kjbasz6  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(495)

我用django创建了一个blog应用程序,并将其附加到存储在本地计算机(localhost)上的mysql数据库中,我通过phpmyadmin管理该数据库。
不过,我改用了ubuntu18.04lts(以前在windows机器上),想用docker容器部署我的应用程序。我想在一个容器中运行mysql数据库,在另一个容器中运行我的博客应用程序,并让它们相互通信(我使用docker compose来实现这一点)。
以下是我应用程序上的数据库字典:

这是docker-compose.yml文件。

在启动docker compose up命令后,出现以下错误:

它说“(2006,“身份验证插件'caching\u sha2\u password'cannot be loaded:dlopen(/usr/local/mysql/lib/plugin/caching\u sha2\u password.so:cannot open shared object file:no such file or diectory”)”。

arknldoa

arknldoa1#

在db容器中,您只需要设置 root 用户但使用 test 用户。所以你要么 MYSQL_PASSWORD 环境变量或使用 root 用户。
关于mysql docker hub docs中env变量的更多信息
我的建议是将db服务定义更改为

services:
    db: 
        image: mysql
        enviroment: 
            MYSQL_RANDOM_ROOT_PASSWORD: 1
            MYSQL_DATABASE: test
            MYSQL_USER: test
            MYSQL_PASSWORD: test

这使得不使用root用户成为可能,这被认为是最佳实践。
真正可能导致这种错误的原因是您的mysql版本错误。在mysql docker hub上,您可以看到 latest tag(如果不提供任何,则with是隐式标记)与 8.0 . 但很多应用程序只与旧版本兼容 5.7 . 要切换此项,请在docker compose add中 5.7 标签:

services:
    db: 
        image: mysql:5.7

(5.7和8.0实际上只是一个主要版本,8.0是在2017年发布的)

相关问题