我用django创建了一个博客应用程序,并将其附加到存储在我的本地计算机(本地主机)上的mysql数据库中,该数据库通过phpmyadmin管理。
但是,我切换到ubuntu 18.04 LTS(以前是在Windows机器上),并想用docker容器部署我的应用程序。 我想在一个容器中运行mysql数据库,在另一个容器中运行我的博客应用程序,并使它们彼此通信(我正在使用docker-compose实现此目的)。
下面是我的应用程序上的DATABASES字典:
这是docker-compose.yml文件。
触发docker-compose up命令后,出现此错误:
上面写着'((2006,“无法加载身份验证插件'caching_sha2_password':dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so:无法打开共享对象文件:无此类文件或目录”)
答案 0 :(得分:1)
在数据库容器中,您仅为root
用户设置密码,而使用test
用户。因此,您要么需要设置MYSQL_PASSWORD
env var。或使用root
用户。
有关mysql docker hub docs中的env变量的更多信息
我的建议是将数据库服务定义更改为
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
标签(如果您不提供,则为隐式标签)与8.0
相同。但是许多应用程序仅与较旧的5.7
兼容。要对此进行切换,请在docker-compose中添加5.7
标签:
services:
db:
image: mysql:5.7
(5.7和8.0实际上只是一个主要版本,而8.0已于2017年发布)