1. 程式人生 > >docker swarm:執行 service update 過程中服務短暫不能訪問的問題

docker swarm:執行 service update 過程中服務短暫不能訪問的問題

構建 實現 問題 新的 訪問 host heal port 集群

這是我們使用自建 docker swarm 集群後在部署時遇到的一個問題,使用 docker service update 命令更新服務時,

docker service update -d=false --force service_name

在更新的過程中服務有短暫的時間不能訪問。

該服務中運行的是 asp.net core web api ,所使用的 Dockerfile 如下:

FROM microsoft/aspnetcore:1.1.2
ARG PROJECT
WORKDIR /app
COPY ${PROJECT}/publish .
RUN echo "dotnet ${PROJECT}.dll --urls http://*:80" > run.sh

通過在服務更新期間在另外一個容器中運行下面的 curl 命令捕捉這個問題:

while true;do curl -sSf -w ‘%{http_code}‘ cloud_api/alive;sleep 2;done

service update 期間不能訪問所更新的服務時,curl 會出現下面的輸出:

curl: (7) Failed to connect to cloud_api port 80: Connection refused
000

懷疑是容器啟動後,asp.net core web api 站點沒有立即開始工作,dotnet 命令啟動站點也需要一定的時間。

針對這個懷疑點,在 Dockcefile 中添加 HEALTHCHECK 指令,這樣可以讓 docker 在容器啟動後對容器內應用進行健康檢查,檢查通過才將容器投入使用。

HEALTHCHECK --interval=5s --timeout=20s    CMD curl -fs localhost/alive || exit 1

註:localhost/alive 是容器內應用實現的一個健康檢查 url 。

添加 HEALTHCHECK 後重新構建鏡像並部署,執行 service update 命令問題沒有出現,搞定!

docker swarm:執行 service update 過程中服務短暫不能訪問的問題