#討論 django 架站於 NAS,NAS 重啟後,django: (2002, "Can't connect to server on 'db' (115)")
國立交通大學
1. 背景
我想做一個開發 CI/CD flow
到 Synology 的 NAS 上,目前應該算 CI 自動了,CD 還是半手動。
CI flow: push 到 github 上,github action 測試後包成 docker push 到 docker hub
CD flow: Synology NAS 提供且目前我使用的 deploy 方式是提供一個 docker-compose.yml 如下
```
version: '3'
services:
db:
image: mysql:latest
restart: always
environment:
- MYSQL_DATABASE=hahadb
- MYSQL_ROOT_PASSWORD=8888haha
volumes:
- ./bin:/var/lib/mysql
# kept the mysql data even the container have be new
ports:
- 3306:3306
container_name: db
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
djangosite:
build: .
image: unnameuser/djangosite:latest #image on docker hub
restart: always
command: bash -c 'sh ./docker_start.sh'
ports:
- "7788:8000"
volumes:
- ./2024_table:/codeForDeploy/2024_table
# volumes:
# - ./:/codeForDeploy/
# do not use volumes since the code on NAS will be old ones
environment:
- DJANGO_MYSQL_DATABASE=hahadb
- DJANGO_MYSQL_USER=root
- DJANGO_MYSQL_PASSWORD=8888haha
- DJANGO_MYSQL_HOST=db
- DJANGO_MYSQL_PORT=3306
links:
- db
depends_on:
db:
condition: service_healthy
container_name: djangosite
```
2. 症狀
在 NAS 重開機的時候,djangosite 的 container 顯示
django.db.utils.OperationalError: (2002, "Can't connect to server on 'db' (115)")
我覺得是 mysql db 還沒 init 完成到
[System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
djangosite 就去連 db 失敗
3. 嘗試過可解方式
a. 手動重啟 djangosite: OK
b. 做 health check 並且設 dependency 如上 yml 所示,再重啟專案: OK
然而下次 NAS 重開一樣遇到 2 顯示的問題,請問是否 yml 有可以改進的設定,或是其他更好的方式來解決,謝謝~
