Docker容器连接到主机MySQL

时间:2017-11-09 23:08:25

标签: php mysql docker host

我正在使用一个使用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]标题。它现在有效。

0 个答案:

没有答案