簡體   English   中英

無法從phpbb連接到docker容器中的mysql

[英]Can't connect to mysql in docker container from phpbb

我的Docker容器運行良好,可以使用圖形sql客戶端連接到數據庫。

但是,當我嘗試連接到phpbb實例時,出現此錯誤:

一般錯誤SQL錯誤[mysqli]

沒有這樣的文件或目錄[2002]

提取此頁面時發生SQL錯誤。 如果此問題仍然存在,請與管理員聯系。

phpbb配置如下所示:

$dbms = 'mysqli';
$dbhost = 'localhost';
$dbport = '';
$dbname = 'xxxxx_xxxx';
$dbuser = 'xxxxxxxxx';
$dbpasswd = 'xxxxxx';

找不到的文件或目錄與mysql.so有關嗎? 如果是這樣,我將在docker configs的哪里設置?

然后不是有人知道發生了什么嗎?

為清楚起見進行編輯:

我的docker-compose.yml如下所示,我使用“ docker-compose up”運行它

php:圖片:webdevops / php-nginx鏈接:-數據庫:數據庫卷:-“ / home / xxx / code / mytest:/ mytest-now”端口:-80:80環境:-WEB_DOCUMENT_ROOT = / mytest / public

db:
  image: mariadb:latest
  volumes:
    - "mytest-db:/var/lib/mysql"
  ports:
    - "3306:3306"
  environment:
    MYSQL_ROOT_PASSWORD: admin
    MYSQL_DATABASE: dbname
    MYSQL_USER: user
    MYSQL_PASSWORD: password

您的連接無法正常工作的原因是使用localhost 我假設您通過docker-compose或docker運行了mysql容器,並將端口3306形式的主機映射到容器上的3306。

現在使用圖形GUI使用localhost:3306 ,它可以工作,這是因為將docker端口轉發到了主機端口。

但是您的phpbb容器localhost指的是容器本身,因此無法建立連接。 因此,有幾種方法可以使其正常工作

主機IP

使用將端口3306映射到的主機IP

$dbhost = '192.168.0.102';

不建議使用這種方法,因為當您連接到其他網絡時,主機IP將會更改

使用mysql容器名稱

使用--name mysqldb運行mysql容器,並在連接中使用此名稱

$dbhost = 'mysqldb';

使用mysql服務名稱

如果您使用docker-compose並將mysql作為服務添加

version: '3'
services:
  mysqldb2:
    image: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
  phpbb:
    .....

然后,您可以在連接設置中使用服務名稱

$dbhost = 'mysqldb2';

運行“ docker inspect containername”后,我在以下地址中看到了一個IP地址:NetworkSettings.Networks.bridge.gateway。

當我嘗試時,它起作用了!

暫無
暫無

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

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