【问题标题】:Connect to MySQL server from php with Docker使用 Docker 从 php 连接到 MySQL 服务器
【发布时间】:2017-08-24 22:52:43
【问题描述】:

我是 Docker 新手。我正在 Docker 环境中开发 PHP 应用程序,我需要使用 MySql Server/数据库来持久化数据。按照文档,我运行此命令来创建 MySql 服务器映像:

docker run -v /var/lib/mysql mariadb

它下载了它,但我也遇到了这个错误:

错误:数据库未初始化且未指定密码选项 您需要指定 MYSQL_ROOT_PASSWORD、MYSQL_ALLOW_EMPTY_PASSWORD 和 MYSQL_RANDOM_ROOT_PASSWORD 之一

如何设置 MYSQL_ALLOW_EMPTY_PASSWORD 选项?

然后我将如何在这个图像上创建一个数据库,然后从我的 PHP 代码(在不同的图像上)读取/写入它?

【问题讨论】:

标签: mysql docker


【解决方案1】:

创建容器

运行这个命令:docker run --name some-mariadb -e MYSQL_ROOT_PASSWORD=mysecretpw -v mysql:/var/lib/mysql -d mariadb:latest

这样,您将使用 mariadb 创建 docker 容器,并将数据存储在 mysql 文件夹中。在命令中,您有 -e MYSQL_ROOT_PASSWORD=my-secret-pw。这会将您的 root 密码设置为 my-secret-pw。当您连接到它时,您的用户是 root,密码是 my-secret-pw

找出地址

docker inspect some-mariadb - 使用此命令,您将找到有关容器的所有信息。您需要您的 IP 地址。

提示:docker inspect some-mariadb | grep IPAddress 您可以更轻松地找到您的 IP 地址。

正在连接

现在,它是 PHP 部分。运行下面的 PHP,但检查你的主机地址,在我的例子中是 172.17.0.2 (from PHP documentation.):

<?php
$link = mysqli_connect("172.17.0.2", "root", "my-secret-pw");

if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

echo "Success: A proper connection to MySQL was made!" . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;

mysqli_close($link);

如果工作正常,您将阅读:

A proper connection to MySQL was made!
Host information: 172.17.0.2 via TCP/IP

Ps.:对于数据库创建,运行所需的命令,就像在没有 docker 的数据库中一样。是一样的(CREATE DATABASE mydb)。

这只是为了开始。我建议你学习docker compose。拿到手后,你会不会学到很多关于 docker 的优势。

【讨论】:

  • 挂在这条线上$link = mysqli_connect("172.17.0.2", "root", "my-secret-pw");
  • 修复它,这是因为我没有在容器上安装 mysql 扩展。对于其他人,我使用此命令 apt-get install php-mysqli 安装它,然后使用 apache2ctl stop 重新启动我的 apache 服务器,然后使用 apache2ctl start
猜你喜欢
  • 2019-11-27
  • 2012-04-02
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
相关资源
最近更新 更多