Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法连接mysql和php_Php_Mysql_Docker_Lamp - Fatal编程技术网

无法连接mysql和php

无法连接mysql和php,php,mysql,docker,lamp,Php,Mysql,Docker,Lamp,有这个灯码头设置(我是一种码头新手): docker compose.yml version: '2' services: webserver: build: . ports: - "8080:80" - "443:443" volumes: - ./:/var/www/html links: - db db: image: mysql:5.6 ports: - "3306:33

有这个灯码头设置(我是一种码头新手):

docker compose.yml

version: '2'

services:
  webserver:
    build: .
    ports:
      - "8080:80"
      - "443:443"
    volumes:
      - ./:/var/www/html
    links:
      - db
  db:
    image: mysql:5.6
    ports:
      - "3306:3306"
    volumes:
       - /var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=adminpasswd
      - MYSQL_DATABASE=se_racken_dev



phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - "88:80"
    links:
      - db:db
Dockerfile

FROM php:5.6-apache

RUN apt-get update -y && apt-get install -y libpng-dev curl libcurl4-openssl-dev

RUN docker-php-ext-install pdo pdo_mysql gd curl

RUN a2enmod rewrite
RUN service apache2 restart
只是无法让我当地的环境发挥作用

从localhost:8088获取此错误消息:

SQLSTATE[HY000][2002]没有这样的文件或目录

如何配置docker设置以克服此连接问题

这里有一些提示:


我是否需要安装vim并执行上面的建议,或者我可以在docker文件中解决它?

webserver
图像上,您应该定义连接值,例如数据库的主机名、数据库名称、用户名和密码

您可以指定一个
.env
文件,如中所示

在您的情况下,应该是:

DB_HOSTNAME=db:/var/run/mysqld/mysqld.sock
DB_USER=root
DB_PASSWORD=somepassword
DB_NAME=se_racken_dev
然后在您的
Dockerfile
中指定:

FROM php:5.6-apache

ENV MYSQL_HOSTNAME="localhost"
ENV MYSQL_PASSWORD=""
ENV MYSQL_USERNAME="root"
ENV MYSQL_DATABASE_NAME=""  

RUN apt-get update -y && apt-get install -y libpng-dev curl libcurl4-openssl-dev

RUN docker-php-ext-install pdo pdo_mysql gd curl

RUN a2enmod rewrite
RUN service apache2 restart
然后修改您的
docker compose.yml
,如下所示:

version: '2'

services:
  webserver:
    build: .
    ports:
      - "8080:80"
      - "443:443"
    volumes:
      - ./:/var/www/html
    links:
      - db
    environment:
     - MYSQL_HOSTNAME=$DB_HOSTNAME
     - MYSQL_PASSWORD=$DB_USER
     - MYSQL_USERNAME=$DB_PASSWORD
     - MYSQL_DATABASE_NAME=$DB_NAME

  db:
    image: mysql:5.6
    ports:
      - "3306:3306"
    volumes:
       - /var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=$DB_PASSWORD
      - MYSQL_DATABASE=$DB_NAME

phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - "88:80"
    links:
      - db:db
然后可以使用php的
getenv
从指定的环境变量中检索值。例如,在您的例子中,
getenv('MYSQL\u DATABASE\u NAME')
将以字符串形式检索值“se\u racken\u dev”。因此,您需要修改数据库配置文件,以便使用上述函数mewned正确检索数据库连接凭据


一种简单的记忆方法是,无论您在Docker文件中通过
ENV
指定了什么,您都可以通过
getenv
webserver
image上检索。您应该定义连接值,例如数据库的主机名、数据库名称、用户名和密码

您可以指定一个
.env
文件,如中所示

在您的情况下,应该是:

DB_HOSTNAME=db:/var/run/mysqld/mysqld.sock
DB_USER=root
DB_PASSWORD=somepassword
DB_NAME=se_racken_dev
然后在您的
Dockerfile
中指定:

FROM php:5.6-apache

ENV MYSQL_HOSTNAME="localhost"
ENV MYSQL_PASSWORD=""
ENV MYSQL_USERNAME="root"
ENV MYSQL_DATABASE_NAME=""  

RUN apt-get update -y && apt-get install -y libpng-dev curl libcurl4-openssl-dev

RUN docker-php-ext-install pdo pdo_mysql gd curl

RUN a2enmod rewrite
RUN service apache2 restart
然后修改您的
docker compose.yml
,如下所示:

version: '2'

services:
  webserver:
    build: .
    ports:
      - "8080:80"
      - "443:443"
    volumes:
      - ./:/var/www/html
    links:
      - db
    environment:
     - MYSQL_HOSTNAME=$DB_HOSTNAME
     - MYSQL_PASSWORD=$DB_USER
     - MYSQL_USERNAME=$DB_PASSWORD
     - MYSQL_DATABASE_NAME=$DB_NAME

  db:
    image: mysql:5.6
    ports:
      - "3306:3306"
    volumes:
       - /var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=$DB_PASSWORD
      - MYSQL_DATABASE=$DB_NAME

phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - "88:80"
    links:
      - db:db
然后可以使用php的
getenv
从指定的环境变量中检索值。例如,在您的例子中,
getenv('MYSQL\u DATABASE\u NAME')
将以字符串形式检索值“se\u racken\u dev”。因此,您需要修改数据库配置文件,以便使用上述函数mewned正确检索数据库连接凭据


一个简单的记忆方法是,无论您在docker文件中通过
ENV
指定什么,您都可以通过
getenv

检索MySQL卷中是否缺少斜杠?您是否检查了docker日志?我想您有权限问题。您有
services.webserver.volumes:./:/var/www/html
,它定义了绑定装载卷,因此您目录中的内容将在容器中以/var/www/html的形式提供。默认情况下,代码将作为root用户在容器中运行。但是apachehttp服务器有一个不同的用户。因此,您需要为Apache HTTP服务器用户编写一个
chown
脚本,使其具有对您的
/var/www/html
的读取权限。请检查,以便在Dockerfile中添加一些额外的运行行。MySQL卷中是否缺少斜杠?是否检查了docker日志?我认为您有权限问题。您有
services.webserver.volumes:./:/var/www/html
,它定义了绑定装载卷,因此您目录中的内容将在容器中以/var/www/html的形式提供。默认情况下,代码将作为root用户在容器中运行。但是apachehttp服务器有一个不同的用户。因此,您需要为Apache HTTP服务器用户编写一个
chown
脚本,使其具有对您的
/var/www/html
的读取权限。选中此项可以在Dockerfile中添加一些额外的运行行。