尝试从Docker容器内部连接到DB时,“连接被拒绝”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试从Docker容器内部连接到DB时,“连接被拒绝”相关的知识,希望对你有一定的参考价值。

我在使用以下Dockerfile时遇到了一些问题:

FROM php:7.0-apache

RUN a2enmod rewrite

RUN docker-php-ext-install pdo pdo_mysql

COPY php.ini /usr/local/etc/php/
COPY . /var/www/html/

我正在使用Slim PHP框架并尝试连接到数据库,但是返回以下错误:

HTTP/1.1 500 Internal Server Error Content-Type: text/html {"error": {"text": SQLSTATE[HY000] [2002] Connection refused}

这是引发异常的代码:

// Instantiate a database connection
$container['db'] = function ($c) {
    try {
        $db = $c['settings']['db'];

        $pdo = new PDO("mysql:host=" . $db['host'], $db['user'], $db['pass']);  

        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

        //Create database if not exists
        $dbname = "`".str_replace("`","``",$db['dbname'])."`";
        $pdo->query("CREATE DATABASE IF NOT EXISTS $dbname");
        $pdo->query("use $dbname");

        //Create tables if not exists
        $pdo->query(
            "CREATE TABLE IF NOT EXISTS `Assets` (
                `id` INT AUTO_INCREMENT NOT NULL,
                `first_property` varchar(50),
                `second_property` varchar(50),
                PRIMARY KEY (`id`))"
        );   

        return $pdo;
    } catch (PDOException $e) {
        return $c['response']
            ->withStatus(500)
            ->withHeader('Content-Type', 'text/html')
            ->write('{"error": {"text": ' . $e->getMessage() . '}');
    }
};

有谁知道问题出在哪里?

先感谢您!

答案

您可以使用类似的东西为MySQL创建一个docker容器。

docker run --name MySQLDB -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=rootpwd -d mysql:5.7

那么(假设是linux)

docker inspect MySQLDB | grep IPA

获取用于连接的IP地址。

以上是关于尝试从Docker容器内部连接到DB时,“连接被拒绝”的主要内容,如果未能解决你的问题,请参考以下文章

从容器内部连接到 PostgreSQL 容器的问题

从 docker 容器内部连接到 docker 守护进程

无法使用 Django 应用程序从容器连接到 MySQL docker 容器

无法从 docker 容器连接到数据库 [重复]

尝试从 Spring Boot Docker 容器连接到 mongo Docker 容器时验证 MongoCredential 时出错?

如何从 Docker 容器连接到本地 Redis 服务器?