2017-04-19 110 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進行檢索。