【问题标题】:Can't connect to my prestashop database using docker无法使用 docker 连接到我的 prestashop 数据库
【发布时间】:2021-05-01 04:59:53
【问题描述】:

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

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 数据库配置连接。

  • 如@balexandre 所说,从命令行中删除-ti 选项。

更新

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

【问题讨论】:

  • 您可以从 GUI 访问数据库吗?意思是你可以连接到数据库? - this is how I actually run my docker services,如果你想看看
  • 是的,我正在使用:mysql --host=127.0.0.1 --port=3307 --user=root --password=1234 并且 evrything 似乎工作
  • 从未使用过,但可能正在调查 PrestaShop 是否可以连接到不是默认端口的任何其他端口?
  • 是的,它说默认端口是 3306,但您可以通过键入 来指定

标签: docker prestashop


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    感谢@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 上配置您的数据库,您需要使用 empty host

    为您的 root 用户更改 插件 >
    ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'ENTER YOUR PASSWORD';
    FLUSH PRIVILEGES;
    

    现在必须一切正常。

    查看@balexandre 答案以了解在 prestashop 设置中要做什么。

    【讨论】:

    【解决方案3】:

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

    可以访问MySQL服务器:

    • 从使用端口 3307 的主机(例如:$ mysql -uroot -padmin -h localhost --port 3307
    • 来自网络中的容器,使用 URL some-mysql

    有趣的部分应该是

    来自网络中使用 URL some-mysql 的容器。

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

    换句话说,只要将“数据库服务器地址”值替换为db,一切都会好的

    喜欢:

    【讨论】:

    • 是的,我尝试了文档中提到的这个解决方案,这对你有用吗?因为我仍然得到错误
    • 你可以看到它对我有用,它说“连接到 MySQL 服务器成功”...警告是它将创建一个新数据库,因为“数据库名称”中提到的数据库不存在还......
    • @ben-ju 唯一不同的是,我没有使用交互参数,所以我没有使用-ti 运行 docker 命令,只是将其删除以正常运行不需要跳转到 CLI 中
    • 抱歉,我正在午休,感谢您的回复。我尝试使用命令重新创建并删除-ti,仍然有同样的问题。如果你按照我写的命令工作,我一定做错了什么
    • 非常感谢您的耐心等待,我非常感谢您花时间学习初级课程。我找到了解决方案。 Prestashop 对插件caching_sha2_password 不熟悉,所以我不得不在root@% 用户上将其更改为mysql_native_password
    猜你喜欢
    • 2022-11-16
    • 2021-04-20
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 2022-01-04
    • 2020-10-25
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多