我的停靠容器运行良好,我可以使用图形sql客户端连接到数据库。
但是,当我试图连接到phpbb实例时,会得到以下错误:
一般错误SQL错误mysqli 2002年没有这类文件或目录 获取此页时发生sql错误。如果此问题仍然存在,请与管理员联系。
phpbb配置如下所示:
$dbms = 'mysqli';
$dbhost = 'localhost';
$dbport = '';
$dbname = 'xxxxx_xxxx';
$dbuser = 'xxxxxxxxx';
$dbpasswd = 'xxxxxx';它找不到的文件或目录会与mysql.so相关吗?如果是这样的话,我该把这个放在码头的什么地方呢?
难道没人知道发生了什么事吗?
清晰的编辑:
我的docker-compose.yml看起来如下所示,我使用的是“docker-组合”来运行它。
php: image: webdevops/php-nginx链接:-db:数据库卷:- "/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发布于 2017-09-17 13:49:16
您的连接不能工作的原因是localhost的使用。我假设您通过或docker运行mysql容器,并将端口3306从主机映射到容器上的3306。
现在使用使用localhost:3306的图形用户界面,这是因为您将停靠端口转发到了主机端口。
但是您的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';发布于 2017-09-18 20:39:45
在运行“码头检查容器名称”之后,我注意到一个ip地址位于: NetworkSettings.Networks.bridge.gateway下面。
当我尝试的时候,它成功了!
https://stackoverflow.com/questions/46263217
复制相似问题