我有一個docker compose文件,如下所示:
版本:“3.9” 服務: mysql資料庫: 圖:mysql:5.7 容器名稱:mysql容器 指令: --default-authentication-plugin=mysql_native_password 卷: - ./db/init.sql:/docker-entrypoint-initdb.d/0_init.sql 連接埠: - 3306:3306 暴露: - 3306 環境: MYSQL_DATABASE:“待辦事項” MYSQL_USER:“管理員” MYSQL_PASSWORD: "密碼" MYSQL_ROOT_PASSWORD: "密碼" SERVICE_TAGS:開發 服務名稱:mysqldb 重新啟動:失敗時 網路: - 內網 快遞應用程式: 容器名稱:api 建造: 。 圖:expressapp:1.0 連接埠: - “3001:3001” 暴露: - “3001” 環境: DB_HOST:mysqldb 資料庫連接埠:3306 DB_USER:“管理員” DB_PASSWORD:“密碼” DB_NAME:待辦事項 DB_CONNECTION_LIMIT:20 SERVICE_TAGS:開發 SERVICE_NAME:expressapp 埠:3001 依賴取決於: -mysql資料庫 網路: - 內網 網路: 內網: 司機:橋 卷: 資料庫:
如果我使用##docker compose up -d命令啟動容器並使用
#ps#命令檢查正在運行的容器,我將得到以下輸出:
但是當我嘗試向伺服器發布
API請求時,我收到以下錯誤訊息:
為什麼是因為我將
DB_HOST變數設定為
mysql服務名稱?
P粉2935505752024-02-27 19:47:11
出現此問題的原因可能是 expressapp
在 mysql
可用於查詢之前啟動。
要控制服務啟動順序,您可以將 healthcheck
新增到 mysqldb
服務:
healthcheck: test: mysql ${MYSQL_DATABASE} --user=${MYSQL_USER} --password='${MYSQL_PASSWORD}' --silent --execute "SELECT 1;" interval: 30s timeout: 10s retries: 5
和 depends_on
區塊到 expressapp
#depends_on: mysqldb: condition: service_healthy
查看完整範例此處
#有關此內容的更多信息,請參閱此答案。