使用Docker从php连接到MySQL服务器

Dar*_*ius 7 mysql docker

我是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代码(在不同的图像上)读/写它?

Raf*_*ael 13

创建容器

运行此命令: 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(来自PHP文档.):

<?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);
Run Code Online (Sandbox Code Playgroud)

如果工作正常,你会读到:

A proper connection to MySQL was made!
Host information: 172.17.0.2 via TCP/IP
Run Code Online (Sandbox Code Playgroud)

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

这只是为了开始.我建议你学习docker compose.当你得到它,你会学到很多关于docker优势的知识.

  • 修复它,这是因为我没有在容器上安装mysql扩展.对于其他任何人,我用这个命令`apt-get install php-mysqli`安装它,然后用`apache2ctl stop`然后`apache2ctl start`重新启动我的apache服务器 (2认同)