zoukankan      html  css  js  c++  java
  • 解决报错: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、测试

     这样就解决了这个问题。

  • 相关阅读:
    基于角色的权限设计(一)
    js图片懒加载插件封装
    项目中必须知道有关css和html的常识
    设为主页代码及添加到收藏夹代码大全
    JS弹出层、弹窗效果+拖曳功能
    算数验证码
    js基础知识
    基于角色的权限设计(二)
    sqlserver数据类型char和nchar,varchar和nvarchar,text和ntext的用法以及区别?
    经典页面布局,任何分辨率下,全屏显示
  • 原文地址:https://www.cnblogs.com/shenjianping/p/12268190.html
Copyright © 2011-2022 走看看