2017-06-15 28 views
2

TL; DR:WordPress無法使用下面的docker-compose配置連接到MySQL。 建立數據庫連接時出錯。爲什麼?docker-compose - 無法連接到MySQL數據庫

我正在使用以下docker-compose.yml文件來設置LEMP開發環境。

docker-compose.yml

version: '3' 
services: 
    nginx: 
    image: nginx 
    ports: 
     - '8080:80' 
    volumes: 
     - ./nginx/config/default.conf:/etc/nginx/conf.d/default.conf 
     - ../wordpress:/var/www/wordpress 
     - ./nginx/log:/var/log/nginx 
    depends_on: 
     - php 
    php: 
    image: php:fpm 
    ports: 
     - 9000:9000 
    volumes: 
     - ../wordpress:/var/www/wordpress 
    depends_on: 
     - mysql 
    mysql: 
    image: mysql 
    ports: 
     - "3306:3306" 
    environment: 
     MYSQL_ROOT_PASSWORD: secret 
     MYSQL_DATABASE: ado 
     MYSQL_USER: ado 
     MYSQL_PASSWORD: secret 
    volumes: 
     - ./mysql/data:/var/lib/mysql 

(我也做手工下面安裝php-mysql

// inside php (`docker-compose exec php sh`) 
docker-php-ext-install mysqli 

// back on my local machine 
docker restart <php's container id> 

注:我嘗試使用這兩種localhost & mysql爲MySQL的主機。

回答

1

好的。得到它了。

我在mysql服務中手動創建數據庫後添加了MySQL環境變量。

MYSQL_ROOT_PASSWORD: secret 
    MYSQL_DATABASE: ado 
    MYSQL_USER: ado 
    MYSQL_PASSWORD: secret 

我不知道爲什麼100%,但刪除MySQL的數據./mysql/data,做docker-compose down,然後再docker-compose up -d(和安裝PHP-的mysqli與docker-php-ext-install mysqli PHP服務內)後,一切正常。

然後,WordPress安裝屏幕出現了。安裝後.......我有一個空白的白屏!

嗯,那是因爲我的WordPress文件沒有包含默認主題。

/wp-admin並激活一個主題後,一切終於......工作。

爲了完整起見,這裏是我的nginx的配置位於./nginx/config/default.conf

server { 
    listen    80 default_server; 
    listen    [::]:80 default_server; 

    root     /var/www/wordpress; 
    index    index.php index.html; 

    location = /favicon.ico { 
    log_not_found off; 
    access_log off; 
    } 

    location = /robots.txt { 
    allow all; 
    log_not_found off; 
    access_log off; 
    } 

    location ~ /\. { 
    deny all; 
    } 

    location ~* /(?:uploads|files)/.*\.php$ { 
    deny all; 
    } 

    location/{ 
    try_files $uri $uri/ /index.php?$args; 
    } 

    rewrite /wp-admin$ $scheme://$host$uri/ permanent; 

    location ~ \.php$ { 
    include /etc/nginx/fastcgi_params; 
    fastcgi_pass php:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; 
    } 
}