php mysql 容器,Docker将PHP容器连接到MySQL

I have two containers, a apache-php container, and a mysql db container.

I am trying to get my php script to query my sql database.

I am however receiving the following errors;

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

AND

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

when toggling the host address, i think i am missing something fundamental to docker and this is driving my crazy.

My docker compose looks like;

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"

my mysql dockerfile looks like

FROM mysql:8

MAINTAINER Mahmoud Zalt

#####################################

# 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

my apache dockerfile looks like;

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

and finally my index.php looks like

$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'));

For my database host i have tried "db", "localhost" and "127.0.0.1".

Any help on this will be greatly appreciated!

解决方案

What you need to use as DNS name is the service name: mysql:

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

Because you named as so the MySQL compose service:

mysql:

build:

context: ./mysql

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值