我正在構建一個簡單的 Jenkins 管道,但是當我從 git 推送部署時,據說該埠已被使用,我需要停止正在運行的埠。
我無法獲取容器 ID
stage("Deploy ") {
steps{
script {
def dockerCmd = 'sudo docker run -p 8080:8080 -d --init biloocabba/kncare-app:1.0'
sshagent(['ec2-server-key']) {
sh "ssh -o StrictHostKeyChecking=no [email protected] ${dockerCmd}"
}
}
}
}
uj5u.com熱心網友回復:
您可以使用類似這樣的腳本運行腳本Jenkinsfile(這里我用名稱 stopByPort.sh 保存腳本)
#!/usr/bin/env bash
for id in $(docker ps -q)
do
if [[ $(docker port "${id}") == *"${1}"* ]]; then
echo "stopping container ${id}"
docker stop "${id}"
fi
done
執行:
stopByPort.sh 8080
鏈接參考:
https ://stackoverflow.com/a/56953427/14312225
uj5u.com熱心網友回復:
當您的 Jenkinsfile 運行時,您可能仍然有一個使用該名稱的正在運行的容器,它阻塞了您想要使用的相同資源。
因此docker run,在下一個容器之前,您需要停止現有容器并將其洗掉:
docker stop <containername>; docker rm <containername>
為了能夠做到這一點,您需要為您的容器設定一個固定的名稱,而不是一些隨機生成的名稱。名稱需要設定為
docker run --name mycontainer ...
所以以后你可以使用
docker stop mycontainer; docker rm mycontainer
在您的管道中,組合看起來相反:
docker stop mycontainer; docker rm mycontainer
docker run --name mycontainer ...
但請注意,在運行新容器時,您需要發出運行舊容器時使用的確切命令。另外,如果mycontainer在構建時沒有運行,您會遇到問題。為了防止這種情況,還有另一種方法。
一旦您的管道將更新的容器推送到注冊表,呼叫Watchtower的單次運行,如果有更新的影像可用,它將自動更新容器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410676.html
標籤:
