本站教程收集整理的这篇文章主要介绍了无法连接到MySQL:没有这样的文件或目录,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。
我写了this docker-compose项目. docker-compose.yml看起来像这样:
version: '3.1'
services:
db:
image: MysqL
restart: always
environment:
- MysqL_DATABASE=mgsv
- MysqL_USER=mgsv_user
- MysqL_password=mgsvpass
- MysqL_ROOT_password=MysqL123
volumes:
- ./MysqL:/docker-entrypoint-initdb.d
www:
build: ./mGSV
restart: always
ports:
- 8080:80
index.php看起来像这样:
<?php
echo "Hello World!";
//MysqLi_connect("localhost","my_user","my_password","my_db");
$con = MysqLi_connect("localhost","mgsv_user","mgsvpass","mgsv");
// check connection
if (MysqLi_connect_errno())
{
echo "Failed to connect to MysqL: " . MysqLi_connect_error();
}
else {
echo "done";
}
?>
Dockerfile基于php容器,看起来像这样.
FROM php:5-apache
RUN apt-get update && apt-get install -y --no-install-recommends \
openjdk-7-jdk \
maven \
git \
&& rm -rf /var/lib/apt/lists/*
RUN docker-php-source extract \
&& docker-php-ext-install MysqL MysqLi pdo pdo_MysqL \
&& docker-php-source delete
RUN cd /var/www/html/ && git clone https://github.com/qunfengdong/mGSV.git
# Move the folder 'mgsv' to DocumentRoot of Apache web server. By default, the DocumentRoot of Apache is /var/www/ (speak to the system administrator to kNow the exact DocumentRoot).
RUN cd /var/www/html/mGSV \
&& mkdir tmp \
&& chmod -R 777 tmp
RUN cd /var/www/html/mGSV && sed -i.bak "s|'gsv'|'mgsv_user'|" lib/setTings.php \
&& sed -i.bak "s|$database_pass = ''|$database_pass = 'mgsvpass'|" lib/setTings.php \
&& sed -i.bak "s|cas-qshare.caS.Unt.edu|localhost|" lib/setTings.php
RUN cp /var/www/html/mGSV/Arial.ttf /usr/share/fonts/truetype/
RUN cd /var/www/html/mGSV/ws \
&& tar -xzf mgsv-ws-server.tar.gz
RUN cd /var/www/html/mGSV/ws/mgsv-ws-server \
&& mvn package
RUN cp -f /var/www/html/mGSV/ws/mgsv-ws-server/target/ws-server-1.0RC1-jar-with-dependencies.jar /var/www/html/mGSV/ws/
RUN cd /var/www/html/mGSV/ws \
&& echo "mgsv_upload_url=http://localhost/mgsv" > config.properties \
&& echo "ws_publish_url=http\://localhost\:8081/MGSVservice" >> config.properties \
&& java -jar ws-server-1.0RC1-jar-with-dependencies.jar &
copY ./index.php /var/www/html/
RUN a2enmod rewrite
当使用http:// localhost:8080 /这是我得到的输出:
Hello World!
Warning: MysqLi_connect(): (HY000/2002): No such file or directory in /var/www/html/index.php on line 4
Failed to connect to MysqL: No such 便宜美国vps file or directory
我错过了什么?
先感谢您.
解决方法:
我相信这里的问题是localhost不是你的数据库主机.如果该php脚本在“www”docker容器中运行,则localhost很可能没有监听MysqL服务器. IIRC,MysqLi的“找不到文件”错误是由于没有在localhost上找到MysqL套接字.我也没有看到你暴露了“db”映像的任何端口,所以我不确定“www”应该如何连接到在其中运行的数据库.
您可能希望找到“db”docker容器的地址,以及它正在侦听的端口,然后在MysqLi_connect()函数中引用它.如果您有最新版本的docker,更简单的方法是将容器添加到同一个Docker网络并按名称引用它们.
编辑:Docker网络
您应该阅读网络功能in the official documentation,因为它非常有用.您可以使用以下docker-compose.yml(未测试):
version: '3.1'
services:
db:
image: MysqL
restart: always
environment:
- MysqL_DATABASE=mgsv
- MysqL_USER=mgsv_user
- MysqL_password=mgsvpass
- MysqL_ROOT_password=MysqL123
volumes:
- ./MysqL:/docker-entrypoint-initdb.d
networks:
- web-db-net
www:
build: ./mGSV
restart: always
ports:
- 8080:80
networks:
- web-db-net
networks:
web-db-net:
然后更改连接线以按名称引用db容器(如果不使用MysqL默认值,则还需要指定端口,3306):
$con = MysqLi_connect("db","mgsv_user","mgsvpass","mgsv");
EDIT2:修复了docker-compose.yml,以便网络实际运行
本站总结
以上是本站教程为你收集整理的无法连接到MySQL:没有这样的文件或目录全部内容,希望文章能够帮你解决无法连接到MySQL:没有这样的文件或目录所遇到的程序开发问题。
如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。