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

时间:2018-12-06 20:41:20

标签: mysql django docker docker-compose containers

我用django创建了一个博客应用程序,并将其附加到存储在我的本地计算机(本地主机)上的mysql数据库中,该数据库通过phpmyadmin管理。

但是,我切换到ubuntu 18.04 LTS(以前是在Windows机器上),并想用docker容器部署我的应用程序。 我想在一个容器中运行mysql数据库,在另一个容器中运行我的博客应用程序,并使它们彼此通信(我正在使用docker-compose实现此目的)。

下面是我的应用程序上的DATABASES字典:

enter image description here

这是docker-compose.yml文件。

enter image description here

触发docker-compose up命令后,出现此错误:

enter image description here

上面写着'((2006,“无法加载身份验证插件'caching_sha2_password':dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so:无法打开共享对象文件:无此类文件或目录”)

1 个答案:

答案 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年发布)