我正在使用一个使用MySQL容器的docker教程。这工作,但我试图从php / apache容器连接到我的主机的MySQL。
我创建了一个名为'weather'的数据库,一个用户'admin'@'%',并授予用户对天气数据库的所有权限。我还创建了必要的表/列。
但是,我不断收到以下消息:
警告:mysqli :: __ construct():( HY000 / 2002):第15行/var/www/html/index.php中的连接被拒绝 无法连接到MySQL:连接被拒绝
这是容器内的php应用程序无法连接的地方:
<?php require 'vendor/autoload.php';
// Create a new Container
$container = new \Slim\Container([
// Add Guzzle as 'http'
'http' => function () {
return new GuzzleHttp\Client();
},
// Add mysqli as 'mysql'
'mysql' => function () {
$mysqli = new mysqli(
getenv('DATABASE_HOST'),
getenv('DATABASE_USER'),
getenv('DATABASE_PASSWORD'),
getenv('DATABASE_NAME')
);
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
exit;
} else {
return $mysqli;
}
},
]);
我使用composer安装了所有依赖项,并在my.cnf中绑定了主机的ip地址(172.17.0.1)。这是我正在运行的docker命令:
docker run -d --rm --name=weather-app -p 38000:80 -v \
$(pwd):/var/www/html \
-e DATABASE_HOST='172.17.0.1' \
-e DATABASE_USER='admin' \
-e DATABASE_PASSWORD='password' \
-e DATABASE_NAME='weather' \
shiphp/weather-app
如果需要更多信息,请参阅git repo:https://github.com/shiphp/weather-app。
提前致谢。
编辑:
我弄明白发生了什么。当我绑定地址时,我忘了在my.cnf中添加[mysqld]标题。它现在有效。