欢迎光临
我们一直在努力

无法连接到MySQL:没有这样的文件或目录

本站教程收集整理的这篇文章主要介绍了无法连接到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:没有这样的文件或目录所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。