#討論 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 有可以改進的設定,或是其他更好的方式來解決,謝謝~
愛心
1
3
全部留言