Docker php_network_getaddresses error

18,462

When making connection via PHP (or any other), use the container's name as host, which in case is learn-php-mysql.

Thus

$mysqli = new mysqli("learn-php-mysql", "learning", "learning", "learning");

Will work.

Share:
18,462
Genert Orginaal
Author by

Genert Orginaal

Updated on June 25, 2022

Comments

  • Genert Orginaal
    Genert Orginaal almost 2 years

    I have following Docker containers running that were generated by PHPDocker:

    learn-php-mysql:
      image: mysql:5.7
      container_name: learn-php-mysql
      volumes:
        - "./.data/db:/var/lib/mysql"
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: learning
        MYSQL_DATABASE: learning
        MYSQL_USER: learning
        MYSQL_PASSWORD: learning
    
    learn-php-webserver:
      image: phpdockerio/nginx:latest
      container_name: learn-php-webserver
      volumes:
        - ./code:/code
        - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8080:80"
      links:
       - learn-php-php-fpm
    
    learn-php-php-fpm:
      build: .
      dockerfile: php-fpm/Dockerfile
      container_name: learn-php-php-fpm
      volumes:
        - ./code:/code
        - ./php-fpm/php-ini-overrides.ini:/etc/php/7.1/fpm/conf.d/99-overrides.ini
      links:
        - learn-php-mysql:mysql
    

    Everything works fine, except for when trying to connect to MySQL server via PHP code:

    $mysqli = new mysqli("db", "learning", "learning", "learning");
    
    /* check connection */
    if ($mysqli->connect_errno) {
        printf("Connect failed: %s\n", $mysqli->connect_error);
        exit();
    }
    

    It will throw following error:

    Connect failed: php_network_getaddresses: getaddrinfo failed: Name or service not known

    Why does this happen?

    .

    .

    You can find repository for this here. And when running docker-compose up go to http://localhost:8080/classes/serialize.php to produce same error.