![](/img/trans.png)
[英]Can't connect to mysql docker container from springboot docker container
[英]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.