condition
在版本 3.0 至 3.8 中已刪除 compose 規範,但現在又回來了!使用 compose 規格 v3.9 版本,您可以使用condition
作為depends_on
長語法形式的選項。
我使用 docker compose 啟動 MySQL 和 Java Web 項目, JavaWeb的啟動需要依賴MySQL來建立完整的數據,所以我使用healthcheck
但是mysql的 healthcheck
有問題,這是我的docker-compose
# docker-compose.yml version: "3.9" services: mysql: build: context: ./mysql command: [ 'mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--default-time-zone=+8:00', '--lower-case-table-names=1' ] ports: - "3306:3306" environment: MYSQL_DATABASE: fuba-db MYSQL_ROOT_PASSWORD: fb123456 healthcheck: test: "mysql -uroot -p$$MYSQL_ROOT_PASSWORD -e 'SELECT * FROM factor_header' fuba-db " interval: 1s timeout: 3s retries: 3 redis: build: ...... nginx: build: ...... fubaquant: build: context: ./webapps ports: - "8080:8080" volumes: - /mnt/java/jar:/home/ruoyi #jar包 depends_on: mysql: condition: service_healthy redis: condition: service_started
錯誤的說法是:
test: "mysql -uroot -p$$MYSQL_ROOT_PASSWORD -e 'SELECT * FROM factor_header' fuba-db "
控制台輸出:
pro-mysql-1 | 2022-04-07T08:16:54.203710Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option. container for service "mysql" is unhealthy
由於 fubaquant dependents_on mysql healthcheck,fubaquant 也沒有啟動
mysql容器的健康檢查日誌為:
我檢查了mysql的健康檢查日誌,它也很健康
感謝您的幫助
您似乎正在嘗試使用錯誤的使用者和密碼來執行運行狀況檢查。你有
$mysql
和$123456
將嘗試解析這些變數的值。您想要的是使用以下內容。然後,這將嘗試使用使用者
mysql
和密碼123456
執行mysaqladmin
(兩者都定義為docker-compose 上mysql
服務的環境變數)我將運行狀況檢查配置為僅允許 3 次重試,間隔 1 秒。當 compose 啟動 java 時,mysql 服務在這 3 秒的延遲內尚未達到健康狀態,因此 compose 停止並報告此錯誤。 增加重試次數後就可以了