2017-04-19 146 views
1

有了这个灯泊坞窗设置(IM一种泊坞窗新手):无法连接MySQL和PHP

泊坞窗,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 

只是不能让我的本地环境工作。

获取本地主机此错误消息:8088:

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

我如何配置我的泊坞窗的设置让过去这个连接问题?

得到了一些线索在这里: Starting with Zend Tutorial - Zend_DB_Adapter throws Exception: "SQLSTATE[HY000] [2002] No such file or directory"

我是否需要安装vim和做什么,他们建议在上面或者我可以解决它在我的搬运工文件?

+0

Arent你缺少一个斜杠在MySQL的卷? – Webbanditten

+0

你检查了码头日志吗? –

+0

我认为你有权限问题。您有'services.webserver.volumes:./:/ var/www/html',它们定义了一个绑定挂载卷,因此您的目录中的内容将在容器中作为/ var/www/html使用。默认情况下,你的代码将以root身份运行在你的容器中。但是Apache HTTP服务器有不同的用户。所以你需要为Apache HTTP服务器用户编写一个'chown'脚本来读取你的'/ var/www/html'。 – andreim

回答

0

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来检索您指定的环境变量的值。例如,在您的情况下,getenv('MYSQL_DATABASE_NAME')将以字符串形式检索值“se_racken_dev”。因此,您需要修改数据库配置文件,以便使用上述函数正确地检索数据库连接凭证。

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