无法使用 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
而且我坚持这一步
编辑:
尝试过:
插入另一台计算机相同的命令,一切正常,直到我尝试从 prestashop 数据库配置连接。
从命令行中删除 -ti
选项,如@balexandre 所说。
更新
问题来自 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 服务器不允许远程连接。
这是解决方法:
刷新权限后,连接通过。
这是我用来创建容器的命令:
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
而且我坚持这一步
编辑:
尝试过:
插入另一台计算机相同的命令,一切正常,直到我尝试从 prestashop 数据库配置连接。
从命令行中删除
-ti
选项,如@balexandre 所说。
更新
问题来自 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 服务器不允许远程连接。 这是解决方法: 刷新权限后,连接通过。