From 18d8269c7545c1a9fe9e93a3e959ed941b9ac98e Mon Sep 17 00:00:00 2001 From: AliReza Beitari Date: Fri, 23 Jun 2023 12:02:55 -0400 Subject: [PATCH 1/4] fix: docker service update with `--detach=false` hangs on services with 0 tasks read more here: https://github.com/docker/cli/issues/627 --- shepherd | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/shepherd b/shepherd index b8c1578..7064117 100755 --- a/shepherd +++ b/shepherd @@ -97,6 +97,11 @@ update_services() { else logger "Trying to update service $name with image $image" "true" + tasks_num=`docker service ls | grep "$name" | awk '{print $4}'` + if [[ $tasks_num = 0/* ]]; then + detach_option="--detach=true" + fi + # shellcheck disable=SC2086 if ! timeout "${TIMEOUT:-300}" docker "${config_flag[@]}" service update "$name" $detach_option $registry_auth $no_resolve_image_flag ${UPDATE_OPTIONS} --image="$image" > /dev/null; then logger "Service $name update failed on $hostname!" From 2d3d1f8f9c46ead85c0008a74325841bf72a47f3 Mon Sep 17 00:00:00 2001 From: AliReza Beitari Date: Thu, 6 Jul 2023 15:52:03 -0400 Subject: [PATCH 2/4] refactor: use $(...) notation instead of legacy backticks `...` --- shepherd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shepherd b/shepherd index 7064117..e7b15e4 100755 --- a/shepherd +++ b/shepherd @@ -97,7 +97,7 @@ update_services() { else logger "Trying to update service $name with image $image" "true" - tasks_num=`docker service ls | grep "$name" | awk '{print $4}'` + tasks_num=$(docker service ls | grep "$name" | awk '{print $4}') if [[ $tasks_num = 0/* ]]; then detach_option="--detach=true" fi From 9273752c1ad838c6345306374736640ba09a791c Mon Sep 17 00:00:00 2001 From: AliReza Beitari Date: Thu, 6 Jul 2023 15:59:57 -0400 Subject: [PATCH 3/4] refactor: `tasks_num` variable renamed to `num_tasks` --- shepherd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shepherd b/shepherd index e7b15e4..338c435 100755 --- a/shepherd +++ b/shepherd @@ -97,8 +97,8 @@ update_services() { else logger "Trying to update service $name with image $image" "true" - tasks_num=$(docker service ls | grep "$name" | awk '{print $4}') - if [[ $tasks_num = 0/* ]]; then + num_tasks=$(docker service ls | grep "$name" | awk '{print $4}') + if [[ $num_tasks = 0/* ]]; then detach_option="--detach=true" fi From a51cb90cbd80850b6c57222826d3d5094fa20c16 Mon Sep 17 00:00:00 2001 From: AliReza Beitari Date: Thu, 6 Jul 2023 16:05:42 -0400 Subject: [PATCH 4/4] refactor: use `-f` for filtering service by name --- shepherd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shepherd b/shepherd index 338c435..3a4ddad 100755 --- a/shepherd +++ b/shepherd @@ -97,7 +97,7 @@ update_services() { else logger "Trying to update service $name with image $image" "true" - num_tasks=$(docker service ls | grep "$name" | awk '{print $4}') + num_tasks=$(docker service ls -f "name=$name" | awk 'NR==2{print $4}') if [[ $num_tasks = 0/* ]]; then detach_option="--detach=true" fi