【已解決】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 \, 重啓,解決

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