web-dev-qa-db-ja.com

Docker php_network_getaddressesエラー

PHPDocker によって生成された以下のDockerコンテナーを実行しています:

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

PHP code:

$mysqli = new mysqli("db", "learning", "learning", "learning");

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

次のエラーがスローされます。

接続失敗:php_network_getaddresses:getaddrinfo失敗:名前またはサービスが不明

なぜこれが起こるのですか?

このリポジトリを見つけることができます here 。そしてdocker-compose uphttp:// localhost:8080/classes/serialize.phpに移動して同じエラーを生成します。

8
Genert Orginaal

PHP(またはその他))経由で接続する場合、コンテナの名前をホストとして使用します。これはlearn-php-mysqlです。

したがって

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

動作します。

11
Genert Orginaal