Docker将PHP容器连接到MySQL

我有两个容器,apache-php容器和一个mysql db容器。 我想让我的PHP脚本来查询我的SQL数据库。 但是,我收到以下错误;

Fatal error: Uncaught PDOException: PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known 

 Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory 

当切换主机地址,我想我错过了一些基本的docker工人,这是我的疯狂。

我的docker写作看起来像;

 version: '2' services: applications: image: tianon/true volumes: - /var/www/test:/var/www/html mysql_store: image: tianon/true volumes: - /var/www/test/mysql:/var/lib/mysql apache2: build: context: ./apache2 volumes_from: - applications ports: - "80:80" depends_on: - mysql links: - mysql mysql: build: context: ./mysql volumes_from: - mysql_store environment: - MYSQL_DATABASE=testapp - MYSQL_USER=johnm - MYSQL_PASSWORD=johnm - MYSQL_ROOT_PASSWORD=secret volumes: - ./mysql/save:/var/lib/mysql ports: - "3306:3306" 

我的mysqldocker文件看起来像

 FROM mysql:8 MAINTAINER Mahmoud Zalt <mahmoud@zalt.me> ##################################### # Set Timezone ##################################### ARG TZ=UTC ENV TZ ${TZ} RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN chown -R mysql:root /var/lib/mysql/ ADD my.cnf /etc/mysql/conf.d/my.cnf CMD ["mysqld"] EXPOSE 3306 

我的apache dockerfile看起来像;

 FROM php:7.0-apache #COPY ./src/ /var/www/html/i #RUN apt-get update && add-apt-repository ppa:ondrej/php && apt-get update && apt-get install php7.0-mysql RUN apt-get update && apt-get install -y \ && docker-php-ext-install pdo pdo_mysql \ && docker-php-ext-enable pdo pdo_mysql 

最后我的index.php看起来像

 <?php $db = new PDO('mysql:host=localhost;port=3306;dbname=testapp', 'root', 'secret'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); var_dump($db->query('SELECT * from users')); 

对于我的数据库主机,我试过“db”,“localhost”和“127.0.0.1”。

任何帮助,将不胜感激!

您需要使用的DNS名称是服务名称: mysql

  $db = new PDO('mysql:host=mysql;port=3306;dbname=testapp', 'root', 'secret'); 

因为你是这样命名的MySQL撰写服务:

  mysql: build: context: ./mysql ...