最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

項(xiàng)目容器啟動(dòng)時(shí)MySQL端口檢測(cè)的問題解決

 更新時(shí)間:2025年12月17日 10:25:22   作者:梓沂  
本文主要介紹了項(xiàng)目容器啟動(dòng)時(shí)MySQL端口檢測(cè)的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

要解決容器啟動(dòng)時(shí)MySQL端口檢測(cè)的問題,用腳本輪詢并檢測(cè)端口可用性是完全可行的。將下面的示例腳本替代Dockerfile或啟動(dòng)腳本中原來的sleep 15命令即可。

方案一:使用 netcat (nc) 命令輪詢(推薦)

nc 是最常用且最可靠的工具。如果容器中沒有,可以在構(gòu)建鏡像時(shí)安裝。

檢查端口腳本
將以下腳本保存到容器內(nèi)(例如 /wait-for-mysql.sh)并賦予執(zhí)行權(quán)限:

#!/bin/sh
# wait-for-mysql.sh

host="$1"
port="$2"
shift 2
cmd="$@"

echo "正在等待 MySQL ($host:$port) 啟動(dòng)..."

while ! nc -z $host $port; do
  sleep 3
done

echo "MySQL 已就緒,啟動(dòng)應(yīng)用..."
exec $cmd

在啟動(dòng)命令中使用
修改你的Docker啟動(dòng)命令,替換掉原來的sleep 15

# 原命令 (使用睡眠):
# CMD nginx; echo "Waiting for MySQL to start..."; sleep 15; java -jar /app/api/app.jar ...

# 新命令 (使用輪詢):
CMD nginx; /wait-for-mysql.sh mysql 3306 java -jar /app/api/app.jar --spring.profiles.active=prod --spring.datasource.url="jdbc:mysql://${DB_HOST}:${DB_PORT:-3306}/${DB_NAME}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" --spring.datasource.username=${DB_USER} --spring.datasource.password=${DB_PASS} --sa-token.is-concurrent=${SA_TOKEN_IS_CONCURRENT:-false} --sa-token.jwt-secret-key=${SA_TOKEN_JWT_SECRET_KEY}

腳本邏輯:腳本會(huì)在 while 循環(huán)中每隔 sleep 3 秒,使用 nc -z 嘗試連接 mysql:3306。成功后,再執(zhí)行后面的Java啟動(dòng)命令 (exec $cmd)。

方案二:使用 bash 內(nèi)置的 /dev/tcp(無需額外工具)

如果容器環(huán)境(如Alpine基礎(chǔ)鏡像)沒有安裝 nc,并且不便安裝,可以利用bash內(nèi)置的 /dev/tcp 偽設(shè)備。

檢查端口腳本
將以下腳本保存到容器內(nèi):

#!/bin/bash
# wait-for-mysql-tcp.sh

host="$1"
port="$2"
shift 2
cmd="$@"

echo "正在等待 MySQL ($host:$port) 啟動(dòng)..."

until bash -c "(echo > /dev/tcp/$host/$port) >/dev/null 2>&1"; do
    sleep 3
done

echo "MySQL 已就緒,啟動(dòng)應(yīng)用..."
exec $cmd

啟動(dòng)命令
修改啟動(dòng)命令,調(diào)用這個(gè)腳本,用法與方案一相同。

關(guān)鍵點(diǎn)說明

特性/方案使用 netcat (nc)使用 /dev/tcp
原理使用網(wǎng)絡(luò)工具 nc 的 -z 參數(shù)進(jìn)行端口掃描。利用 bash 的 /dev/tcp 偽文件系統(tǒng)進(jìn)行 TCP 連接。
依賴需要安裝 netcat-openbsd 或 nmap-ncat 包。僅依賴 bash(多數(shù)鏡像已包含)。
優(yōu)點(diǎn)語法標(biāo)準(zhǔn),功能明確,最常用。無需額外安裝任何包,腳本簡(jiǎn)潔。
潛在缺點(diǎn)部分極簡(jiǎn)基礎(chǔ)鏡像可能未預(yù)裝。需要 Bash 環(huán)境,若容器使用 sh 可能不支持。

實(shí)施建議

  1. 選擇方案:如果你的鏡像基于 alpine,建議使用方案二(/dev/tcp),因?yàn)榘惭b nc 會(huì)增加鏡像大小。如果是 ubuntudebian 等較完整的鏡像,兩個(gè)方案都可行,使用 nc 的命令更直觀。
  2. 修改 Dockerfile:確保將上述腳本復(fù)制到鏡像中,并在 CMD 指令中使用。
    # 以方案一為例,需在Dockerfile中安裝nc并復(fù)制腳本
    FROM your-base-image
    # 安裝netcat (例如在基于Debian的鏡像中)
    RUN apt-get update && apt-get install -y netcat-openbsd && rm -rf /var/lib/apt/lists/*
    # 復(fù)制等待腳本
    COPY wait-for-mysql.sh /usr/local/bin/
    RUN chmod +x /usr/local/bin/wait-for-mysql.sh
    # 修改啟動(dòng)命令
    CMD ["sh", "-c", "nginx; wait-for-mysql.sh mysql 3306 java -jar /app/api/app.jar ..."]
    

這個(gè)方案能精確控制等待時(shí)機(jī),解決了固定時(shí)間可能過長(zhǎng)或過短的問題。如果你需要根據(jù)特定基礎(chǔ)鏡像(例如Alpine)調(diào)整Dockerfile的安裝步驟,可以告訴我,我能提供更具體的修改建議。

到此這篇關(guān)于項(xiàng)目容器啟動(dòng)時(shí)MySQL端口檢測(cè)的問題解決的文章就介紹到這了,更多相關(guān)MySQL端口檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

吉水县| 大荔县| 十堰市| 平乡县| 酉阳| 凤庆县| 彭泽县| 淳化县| 崇文区| 虎林市| 孟州市| 营口市| 武汉市| 峨眉山市| 武夷山市| 东源县| 宣威市| 靖安县| 庐江县| 新野县| 阳高县| 花莲县| 珠海市| 永安市| 左权县| 昌宁县| 芜湖市| 彝良县| 夏河县| 卢氏县| 长寿区| 菏泽市| 江孜县| 隆德县| 河津市| 晋城| 那坡县| 定结县| 改则县| 凉城县| 阿坝|