无法连接mysql和php

有这个灯docker设置(我是一个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]没有这样的文件或目录

我怎样才能configuration我的docker安装程序来解决这个连接问题?

这里有一些提示: 从Zend教程开始 – Zend_DB_Adapter抛出exception:“SQLSTATE [HY000] [2002]没有这样的文件或目录”

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

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

您可以指定一个.env文件,如https://docs.docker.com/compose/env-file/所示

在你的情况下,应该是:

 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来检索你指定的环境variables的值。 例如在你的情况下, getenv('MYSQL_DATABASE_NAME')将以string的forms检索值“se_racken_dev”。 因此,您需要修改数据库configuration文件,以便使用上面介绍的函数正确地检索数据库连接凭据。

要记住的一个简单的方法是通过您的dockerfile中的ENV指定,您可以通过getenv进行检索。