簡體   English   中英

無法連接到本地 MariaDB 運行 Docker PHP PDO

[英]Can't connect to local MariaDB running with Docker with PHP PDO

我有一個本地 Docker 組合堆棧,其中包含 MariaDB、PHP-FPM 和 Nginx 在我的機器上運行以進行本地開發。 我可以在我的瀏覽器上成功訪問 Nginx 在 http://localhost:8080/ 上提供的網頁。 我還可以在主機 127.0.0.1、端口 8889 上使用本地 GUI DB 瀏覽器 TablePlus 成功連接到數據庫。它使用用戶root和密碼root (但奇怪的是沒有任何其他用戶設置為 MYSQL_USER,MYSQL_PASSWORD env我在 Docker 中捕獲的變量組成)。

無論如何,當我嘗試使用以下 PHP 代碼連接 PHP/PDO 時,相同的憑據:

$db = new PDO('mysql:host=localhost;port=8889;dbname=words', 'root', 'root');

...我收到Error: SQLSTATE[HY000] [2002] No such file or directory

編輯:當我使用時:

$db = new PDO('mysql:host=127.0.0.1;port=8889;dbname=words', 'root', 'root');

...我收到Error: SQLSTATE[HY000] [2002] Connection refused

為什么?

(這是我的 Docker 撰寫文件:

version: "3"

services:

  mariadb:
    image: mariadb:10.5
    container_name: mariadb-10.5
    restart: unless-stopped
    ports:
      # port 3306 is the default port for mariadb, forwarded to 8889 on the local machine
      - 8889:3306
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}

  php-fpm:
    image: bitnami/php-fpm:7.4
    container_name: phpfpm-7.4
    restart: unless-stopped
    ports:
      - 9000:9000
    volumes:
      - ${WWW_DOCUMENT_ROOT}:/app

  nginx:
    image: bitnami/nginx:1.20
    container_name: nginx-1.20
    restart: always
    ports:
      - 8080:8080
    volumes:
      - ./nginx/logs:/opt/bitnami/nginx/logs/
      - ./nginx/server-blocks/default.conf:/opt/bitnami/nginx/conf/server_blocks/default.conf:ro
      - ${WWW_DOCUMENT_ROOT}:/app
    depends_on:
      - mariadb
      - php-fpm

)

正如@danblack所回答的那樣,由於與數據庫的連接是從 Docker 容器內部到另一個容器完成的:

  1. 容器之間的連接始終使用未重新映射的端口。 因此,與 DB 容器的連接需要使用內部 MariaDB 標准端口 3306——而不是重新映射的暴露的 8889 端口。

  2. 數據庫的主機名必須是數據庫容器名稱(在本例中為 MariaDB 容器名稱mariadb-10.5 ),而不是127.0.0.1localhost

因此,總而言之,PHP/PDO 連接 object 變為:

$db = new PDO('mysql:host=mariadb-10.5;dbname=words', 'root', 'root');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM