Il modo migliore per fermare il contenitore Docker in Jenkins

Ho un CI-server (jenkins) che sta costruendo nuove immagini Docker. Ora voglio eseguire un nuovo contenitore Docker quando la build è successo. Ma per questo devo interrompere il precedente contenitore in esecuzione.

Qual è il modo migliore per eseguire questo? localhost:5000/test/myapp:"${BUILD_ID} è il nome delle mie nuove immagini, quindi sto usando il tag build-id come tag.

 docker stop localhost:5000/dbm/my-php-app:${BUILD_ID-1} 

Ma questa non è una soluzione giusta perché quando una costruzione potrebbe fallire, questo sarebbe sbagliato.

 Build 1: succes -> run container 1 Build 2: failed -> run container 1 Build 3: succes -> stop container (3-1) =2 --> wrong (isn't running) 

Cosa potrebbe essere una soluzione? Le proposte in cui devo cambiare l'idea di tag sono anche i benvenuti

Il command docker stop prende un nome del contenitore docker come parametro, non un ID image docker .

Devi specificare il tuo contenitore quando lo esegui:

 # build the new image docker build -t localhost:5000/test/myapp:"${BUILD_ID}" . # remove the existing container docker rm -f myjob && echo "container myjob removed" || echo "container myjob does not exist" # create and run a new container docker run -d --name myjob localhost:5000/test/myapp:"${BUILD_ID}" 

Basta sostituire il myjob con un nome più adatto in questo esempio.

Grazie a @Thomasleveil ho trovato la risposta alla mia domanda:

 # build the new image docker build -t localhost:5000/test/myapp:"${BUILD_ID}" . # remove old container SUCCESS_BUILD=`wget -qO- http://jenkins_url:8080/job/jobname/lastSuccessfulBuild/buildNumber` docker rm -f "${SUCCESS_BUILD}" && echo "container ${SUCCESS_BUILD} removed" || echo "container ${SUCCESS_BUILD} does not exist" # run new container docker run -d -p 80:80 --name "${BUILD_ID}" localhost:5000/test/myapp:${version}