【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密碼,然后用密碼方式訪問。
就這樣,分享到這里。