问答详情
源自:6-3 compose实战

【6-3 compose实战】2022-03-10成功运行说明(2)关于无法运行的一些问题

即便是完全按照说明启动起来,也会遇到各种问题。

我整理一下我遇到的几个坑。

【问题1】yml文件缩进格式有问题

ERROR: The Compose file './docker-compose.yml' is invalid because:

Additional properties are not allowed ('db' was unexpected)

。。。

因为yml文件是有格式要求的,尤其是缩进空格,所以如果缩进的空格不对,会出现上面的问题。

简单理解就是yml解析的时候对象下面的属性会变成其他层级的对象属性。


【问题2】docker-compose up -d运行之后,程序不正常,但是自己也不知道怎么排查。

这个有两个办法:

docker-compose logs可以查看运行的日志,出现什么问题,自己排查就行了。

另外一个,刚开始运行其实可以不要-d

docker-compose up 运行,这样虽然Ctrl+C会导致容器运行结束,但是好在所有的日志都会打印出来,帮助大家排查问题。

我个人更推荐在学习和调试过程中使用。


【问题3】MySQL数据库一直无法访问,一直提示Access denied的异常

这个时候nginx一般都能运行,页面给出的返回值是502

这也是我遇到的最后一个坑。


需要注意的地方有这么几个:

  1. compose.yml文件中的MySQL的db容器的数据库密码配置是否正确。

  2. MySQL数据库容器是否正常。

我这边解决这个问题是直接忽略了,我选择了通过修改MySQL容器的配置文件,无密码登录,因为我刚学docker实在弄不明白MySQL的密码配置在哪儿,并且我配置的都对,就是无法正常访问MySQL,使用了navicat测试用具root用户也无法访问,最多只是ghost用户能登录,但是看不到名字为ghost的数据库。


我的解决办法共享一下:

登录进MySQL数据库的容器:

[root@node2 ~]# docker exec -it ghost-db-1 bash

 

找到MySQL的配置文件:

root@763a858b6c37:/# cd /etc/mysql/mysql.conf.d/

root@763a858b6c37:/etc/mysql/mysql.conf.d# ls

mysqld.cnf

root@763a858b6c37:/etc/mysql/mysql.conf.d#

参考文档:

docker的MySQL容器的配置文件

https://blog.csdn.net/zhaoyajie1011/article/details/98623666

 

查看MySQL数据库镜像名称,找到名称ghost-db-1

[root@node2 ghost]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                            PORTS                    NAMES

90cc509c32ca        ghost_nginx         "/docker-entrypoint.…"   23 minutes ago      Up 23 minutes                     0.0.0.0:80->80/tcp       ghost-nginx-1

9f6d46d6bab4        ghost_ghost-app     "docker-entrypoint.s…"   23 minutes ago      Restarting (255) 13 seconds ago                            ghost-ghost-app-1

763a858b6c37        mysql:5.7.15        "docker-entrypoint.s…"   23 minutes ago      Up 13 minutes                     0.0.0.0:3306->3306/tcp   ghost-db-1

拷贝MySQL的配置文件到宿主机:

 [root@node2 ghost]# docker cp ghost-db-1:/etc/mysql/mysql.conf.d/mysqld.cnf .

修改配置文件:

在[mysqld]标签下增加以下内容:

[mysqld]

skip-grant-tables

参考文档:

https://www.cnblogs.com/passer00/p/6931487.html

 

将修改后的配置文件拷贝回容器:

[root@node2 ghost]# docker cp mysqld.cnf ghost-db-1:/etc/mysql/mysql.conf.d/

进入容器核对查看:

[root@node2 ghost]# docker exec -it ghost-db-1 bash

root@763a858b6c37:/# cd /etc/mysql/mysql.conf.d/

root@763a858b6c37:/etc/mysql/mysql.conf.d# more mysqld.cnf

重新启动容器:

[root@node2 ghost]# docker restart ghost-db-1

再次进入容器,尝试无密码方式登录:

[root@node2 ghost]# docker exec -it ghost-db-1 bash

root@763a858b6c37:/# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 5

Server version: 5.7.15 MySQL Community Server (GPL)

 

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

mysql>

可以无密码登陆了。

这样ghost例子就可以正常运行了。

当然在生产环境中这样做是非常不安全的,你们可以尝试修改下MySQL密码,然后用密码方式访问。


就这样,分享到这里。


提问者:山青媛娴 2022-03-10 14:51

个回答