【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
这也是我遇到的最后一个坑。
需要注意的地方有这么几个:
compose.yml文件中的MySQL的db容器的数据库密码配置是否正确。
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
参考文档:
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密码,然后用密码方式访问。
就这样,分享到这里。