无法使用 docker 连接到我的 prestashop 数据库

Can't connect to my prestashop database using docker

这是我用来创建容器的命令:

docker network create prestashop

docker run -ti --name db --network prestashop -e MYSQL_ROOT_PASSWORD=1234 -p 3307:3306 -d mysql:latest

docker run -ti --name prestashop --network prestashop -e DB_SERVER=db -p 8080:80 -d prestashop/prestashop

有了它我可以访问 Prestashop 安装 但是当我需要配置数据库时我得到这个错误:

Database Server is not found. Please verify the login, password and server fields (DbPDO)

我正在使用这些字段:

Database server address : (for this one I tried :)  db | 127.0.0.1:3037 | 127.0.0.1

Database name : prestashop

Database login : root

Database password : 1234

而且我坚持这一步

编辑:

尝试过:

更新

问题来自 MySQL 版本 8。我将 mysql:latest 更改为 mysql:5.7,一切正常,但这不是我要找的版本。 我仍然不知道为什么 MySQL 8 不起作用

如果你关注documentation in Docker Hub,它会说:

The MySQL server can be reached:

  • from the host using port 3307 (example: $ mysql -uroot -padmin -h localhost --port 3307)
  • from a container in the network using the URL some-mysql.

有趣的部分应该是

from a container in the network using the URL some-mysql.

这意味着,由于您已将 MySQL 图像的名称更改为 db,因此您应该使用 db 而不是 127.0.0.1,因为您告诉 Docker 那两个容器 can only communicate through the prestashop network--network prestashop

换句话说,只要将“数据库服务器地址”值替换为 db

就可以了

喜欢:

感谢@balexandre 的帮助。

首先使用以下命令设置网络和他的两个容器

docker network create prestashop

docker run --name db --network prestashop -e MYSQL_ROOT_PASSWORD=1234 -p 3307:3306 -d mysql:latest

docker run --name prestashop --network prestashop -e DB_SERVER=db -p 8080:80 -d prestashop/prestashop

然后,如果您使用的是 prestashop 1.7.* 和 MySQL 版本 8.* 的最新版本

您可能需要更改用于连接的插件。

连接到您的 mysql 容器 bash :

docker exec -it db mysql -uroot -p

当您使用 MySQL 命令行时 检查您的用户:

SELECT user,plugin,host FROM mysql.user;

输出:

+------------------+-----------------------+-----------+
| user             | plugin                | host      |
+------------------+-----------------------+-----------+
| root             | caching_sha2_password |           |
| mysql.infoschema | caching_sha2_password | localhost |
| mysql.session    | caching_sha2_password | localhost |
| mysql.sys        | caching_sha2_password | localhost |
| root             | caching_sha2_password | localhost |
+------------------+-----------------------+-----------+

为了能够在您的 prestashop 上配置您的数据库,您需要为您的 root 用户更改 插件 空主机

ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'ENTER YOUR PASSWORD';
FLUSH PRIVILEGES;

现在一切正常。

查看@balexandre 的回答以了解在 prestashop 设置上要做什么。

除了@balexandre 的回答之外,您还想检查对mysql 服务器的远程访问权限。 为此,请在 cli 模式下打开要从中访问 mysql 容器的容器,然后尝试使用 'mysql -u root -p' 命令连接到 mysql。您可能会收到错误 1130,这意味着 mysql 服务器不允许远程连接。 这是解决方法: 刷新权限后,连接通过。