php - Docker 使用 PHP 连接 MySQL 的问题

标签 php mysql docker pdo

我从 docker 开始,我想使用 PDO 驱动程序连接到我的数据库。 但不幸的是,我的页面上出现了一个错误,我不知道如何解决它。 你能帮帮我吗?

这是我的错误:

Fatal error: Uncaught PDOException: PDO :: __ construct (): php_network_getaddresses: getaddrinfo failed: No address associated with hostname

这是我的index.php:

<?php
    $db = new PDO('mysql:host=db:3306;dbname:DockerProject', "root", "root");
?>

这是我的 dockerfile:

FROM php:7.2-apache
RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libpq-dev \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
&& docker-php-ext-install gd mbstring pdo pdo_mysql pdo_pgsql

这是我的 docker-compose.yaml:

version: '3'

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: DockerProject
      MYSQL_USER: devuser
      MYSQL_PASSWORD: devpass
    ports:
      - "3306:3306"
  web:
    image: php_pdo:latest
    container_name: php_web
    depends_on:
      - db
    volumes:
      - ./php/:/var/www/html/
    ports:
      - "8100:80"
    stdin_open: true
    tty: true
  myadmin:
    image: phpmyadmin/phpmyadmin
    ports:
        - "8080:80"
    links:
        - db:db

最佳答案

定义dsn

$db = new PDO('mysql:host=db;dbname=DockerProject', "root", "root");

如果您需要显式定义端口,请使用:

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

此外,不确定为什么 dbname:DockerProject 的工作原理是正确的语法是 dbname=DockerProject

关于php - Docker 使用 PHP 连接 MySQL 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53801674/

相关文章:

node.js - 我是否滥用了 Docker(nodejs 应用程序部署)?

php - 使用单选按钮和复选框过滤 HTML 表格

php - 请求 MP3 文件时设置 apache 为 PHP 提供服务

php - Jquery显示隐藏在ie7中不起作用

php - 使用 PHP PDO 根据之前的选择动态更新下拉列表

java - 如何根据外键从引用表中获取值?

Docker:在 Dockerfile 中设置导出路径

php - 无需前端页面请求即可提交表单的选项

mysql - mysql 中 except 的替代方案

Docker --mount type=tmpfs 具有 'exec' 权限