解決報錯:Error establishing a database connection


一、問題描述

在使用docker創建wordpress和mysql容器后,訪問頁面發生如下錯誤:

Error establishing a database connection

這個問題的原因在於當我在創建mysql容器時指定了創建數據庫的密碼,然而wordpress配置文件中數據庫的連接密碼默認為空,所以出現上面的錯誤。

二、解決問題

   當我們使用wordpress創建容器后發現,如果進入到容器以后修改配置文件有些困難,因為這個容器里面並沒有一些編輯工具,例如vi等,那么應該怎么解決呢?我們在創建這個容器時,可以將配置文件這個目錄給映射到本地,通過在本地來進行修改:

1、創建wordpress服務 

[root@centos-7 docker]#  docker service create --name wordpress -p 80:80 --env WORDPRESS_DB-PASSWORD=root \
 --env WORDPRESS_DB_HOST=mysql --network demo \
 --mount type=volume,source=wordpress-config,destination=/var/www/html wordpress

  可以看到在創建這個容器時制定了--mount參數,這個在docker volume中相當於-v,只不過這里使用的是swarm而已,source參數后面的值就是映射到本地的目錄,注意這個只能是相對路徑,不能是絕對路徑;destination參數后面的值是容器中的目錄。

2、查看本地目錄

現在需要知道這個相對路徑wordpress-config到底在什么地方,因為使用的是swarm,所以需要知道這個容器在那個節點上運行,然后去那個節點上查看:

  • 查看容器位置

在manager節點上查看運行容器的各個位置:

[root@centos-7 Desktop]# docker service ps wordpress 
ID                  NAME                IMAGE               NODE                    DESIRED STATE       CURRENT STATE            ERROR    PORTS
oglkrvgo154n        wordpress.1         wordpress:latest    localhost.localdomain   Running             Running 29 minutes ago  

然后去localhost.localdomain這個節點上查看這個容器的情況:

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED        STATUS        PORTS       NAMES
4f36a273c8cc        wordpress:latest    "docker-entrypoint.s…"   4 minutes ago  Up 4 minutes  80/tcp   wordpress.1.oglkrvgo154nfvdgun1iqxopo
[root@localhost ~]# docker inspect 4f36a273c8cc #查看那這個容器
{
...
...
 "Mounts": [
            {
                "Type": "volume",
                "Name": "wordpress-config",
                "Source": "/var/lib/docker/volumes/wordpress-config/_data",
                "Destination": "/var/www/html",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],
...
...

}

內容很多,但是只需要關注上面這個就可以了,然后我們在本地進入到/var/lib/docker/volumes/wordpress-config/_data這個目錄中:

[root@localhost ~]# cd /var/lib/docker/volumes/wordpress-config/_data
[root@localhost _data]# ls
index.php    wp-activate.php     wp-comments-post.php  wp-content   wp-links-opml.php  wp-mail.php      wp-trackback.php
license.txt  wp-admin            wp-config.php         wp-cron.php  wp-load.php        wp-settings.php  xmlrpc.php
readme.html  wp-blog-header.php  wp-config-sample.php  wp-includes  wp-login.php       wp-signup.php

這就是該容器中的文件,我們需要修改wp-config.php這個文件中的內容。

/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress');

/** MySQL database username */
define( 'DB_USER', 'root');

/** MySQL database password */
define( 'DB_PASSWORD', 'root');    #將這個密碼設置上就ok了

/** MySQL hostname */
define( 'DB_HOST', 'mysql');

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '');

其實只需要改動上面數據庫密碼處,將密碼天成你數據庫的密碼就可以了。

3、測試

 

 這樣就解決了這個問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM