无法连接mysql和php

时间:2017-04-19 12:18:08

标签: php mysql docker lamp

安装此灯泡底座(我是一种码头新手):

搬运工-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设置以解决此连接问题?

这里有一些提示: Starting with Zend Tutorial - Zend_DB_Adapter throws Exception: "SQLSTATE[HY000] [2002] No such file or directory"

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

1 个答案:

答案 0 :(得分:0)

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

您可以指定https://docs.docker.com/compose/env-file/

中显示的.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_DATABASE_NAME')将检索值" se_racken_dev"作为一个字符串。因此,您需要修改数据库配置文件,以便使用上面提到的函数正确地检索数据库连接凭据。

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