我有如下所示的 sh 代碼 (DashBoardImport.sh)。它檢查 ap? 回應以無限回圈匯入 kibana 儀表板,如果成功回應,則中斷回圈:
#!/bin/sh
# use while loop to check if kibana is running
while true
do
response=$(curl -X POST elk:5601/api/saved_objects/_import -H "kbn-xsrf: true" --form file=@/etc/elasticsearch/CityCountDashBoard.ndjson | grep -oE "^\{\"success")
#curl -X GET elk:9200/git-demo-topic | grep -oE "^\{\"git" > /dev/null
#match=$?
echo $response
if [ '{"success' = $response ]
then
echo "Running import dashboard.."
#curl -X POST elk:5601/api/saved_objects/_import -H "kbn-xsrf: true" --form file=@/etc/elasticsearch/CityCountDashBoard.ndjson
break
else
echo "Kibana is not running yet"
sleep 5
fi
done
我通過 docker 檔案運行 DashBoardImport.sh:
ADD ./CityCountDashBoard.ndjson /etc/elasticsearch/CityCountDashBoard.ndjson
ADD ./DashBoardImport.sh /etc/elasticsearch/DashBoardImport.sh
#ENTRYPOINT /etc/elasticsearch/DashBoardImport.sh &
USER root
RUN chmod x /etc/elasticsearch/DashBoardImport.sh
#RUN /etc/elasticsearch/DashBoardImport.sh &
RUN nohup bash -c "/etc/elasticsearch/DashBoardImport.sh" >/dev/null 2>&1 &
我嘗試了很多選項,你可以看到注釋掉了。當我在 Docker 容器上手動運行 sh 時,它運行良好。我殺死了 kibana 服務。然后運行代碼。在我啟動 kibana 后,代碼按預期成功運行并匯入了儀表板。但是當它自動在容器上啟動時它不起作用。
你有什么主意嗎?
提前非常感謝:)
uj5u.com熱心網友回復:
一個RUN步驟在臨時容器中執行,直到命令回傳,然后 docker 捕獲對檔案系統的更改作為映像中的新層。沒有其他任何東西,沒有環境變數、正在運行的行程等,只有檔案系統發生了變化。
因此,當您RUN nohup ... &該行程在后臺立即回傳時(nohup ... &明確這樣做),因此容器退出,終止容器中運行的所有行程,并捕獲對您的映像所做的檔案系統更改(如果有)。
如果您希望在啟動容器時運行某些內容,請將其添加到您的 ENTRYPOINT 或 CMD。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372006.html
