【已解决】docker compose 错误 php_network_getaddresses: getaddrinfo failed: Name does not resolve

错误描述

  • dnmp(docker+nginx+mysql+php+redis)搭建开发环境
  • 在命令行使用命令docker run启动一个PHP容器,PHP会连接docker compose启动的容器MySQL。
php_dq() {
    tty=
    tty -s && tty=--tty
    docker run \
        $tty \
        --name php_dq \
        -p 10000:10000 \
        --network default \
        --interactive \
        --rm \
        --volume $PWD:/www/$(basename $PWD):rw \
        --workdir /www/$(basename $PWD) \
        dnmp_php php "$@"
}

但是连接过程中抛出异常,

php_network_getaddresses: 
getaddrinfo failed: Name does not resolve

PHP通过网络访问地址时失败,所以报错。

首先定位错误位置

$dbms = 'mysql';     //数据库类型
$host = DqConf::$db['host']; //数据库主机名
$port = DqConf::$db['port'];
$dbName = DqConf::$db['database'];    //使用的数据库
$user = DqConf::$db['user'];      //数据库连接用户名
$pass = DqConf::$db['password'];          //对应的密码
$dsn = "$dbms:host=$host;dbname=$dbName;port=$port;";
try {
	// 下面这行抛出错误
    $dbh = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_TIMEOUT => 3)); //初始化一个PDO对象
    self::$objMysql = $dbh;
    $time = time();
    return $dbh;
} catch (PDOException $e) {
    return $e->getMessage();
}

PHP连接MySQL容器,建立TCP连接的时候报错

尝试解决

那为什么访问不了MySQL容器呢?

docker container 之间相互访问失败,具体这里是 PHP容器访问不了MySQL容器,

1. 确认PHP中配置的MySQL host没错

    /**
     * 数据库配置
     */
    static $db=array(
        'host'=>'mysql',
        'port'=>'3306',
        'user'=>'root',
        'password'=>'123456',
        'database'=>'dq',
    );

2. 连接到同一个network
在这里,host是mysql容器的name,前提是他们都使用bridge模式,并连接到同一个network

> docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
c3b8f1f1c898        bridge              bridge              local
ce8ddff993be        dnmp_default        bridge              local
224556dfacff        host                host                local
5b614532c01e        none                null                local

这里的dnmp_default就是我们的network的名字。

查看dnmp_default下有几个容器在运行

> docker network inspect dnmp_default

Containers 下并没有我们要找的容器。
检查启动命令,修改参数--network dnmp_default \, 重启,解决

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章