Bash 如何使用shell脚本检查docker服务是否已经在UCP上运行 我想检查docker服务是否正在运行。 如果它正在运行,我想删除该服务并创建一个新的 我正在使用shell脚本执行此任务

Bash 如何使用shell脚本检查docker服务是否已经在UCP上运行 我想检查docker服务是否正在运行。 如果它正在运行,我想删除该服务并创建一个新的 我正在使用shell脚本执行此任务,bash,shell,docker,docker-machine,docker-ucp,Bash,Shell,Docker,Docker Machine,Docker Ucp,我提供了我所面对的shell脚本的代码片段 来自后台程序的错误响应:未找到服务数据映射器服务 if [[ "$(docker service inspect ${DOCKER_SERVICE_NAME} 2> /dev/null)" != "" ]]; then docker service rm ${DOCKER_SERVICE_NAME} else echo "service doesn't exist or may have been removed manually" fi

我提供了我所面对的shell脚本的代码片段
来自后台程序的错误响应:未找到服务数据映射器服务

if [[ "$(docker service inspect ${DOCKER_SERVICE_NAME}  2> /dev/null)" != "" ]]; then
  docker service rm ${DOCKER_SERVICE_NAME}
else echo "service doesn't exist or may have been removed manually"
fi
docker service create \
    --name ${DOCKER_SERVICE_NAME} \
    --network ${OVERLAY_NETWORK} \
    --reserve-memory ${10} \
    --constraint node.labels.run_images==yes \
    --mode global \
    --with-registry-auth \
    --restart-condition any \
    -p ${EXTERNAL_PORT}:${INTERNAL_PORT} \
    -e "SPRING_PROFILES_ACTIVE="${SPRING_PROFILE} \
    -e "JAVA_OPTS: -Xms256m -Xmx512m" \
    ${DTR_HOST_NAME}/${DTR_ORG_NAME}/${DTR_REP_NAME}:${BUILD_NUMBER}
我在if语句行中得到错误


如果服务正在运行并且我触发了这个shell脚本,那么一切都会正常运行,但是如果服务没有运行并且我触发了这个shell脚本,那么我将面临上述错误。

您可能应该只测试
docker inspect
命令的返回代码,而不是查看输出。错误似乎不太可能来自
if
语句行,因为您正在捕获
stdout
并重定向
stderr
(因此该语句不会生成任何可见的输出)。@larsks:您能告诉我在shell中需要修改的具体内容吗file@larsksdocker inspect-f{{.State.Running}$ServiceName类似于您正在谈论的内容??大多数docker命令返回一个shell退出代码,指示成功或失败。例如,您可以使用
如果docker image inspect myimage>/dev/null 2>&1;之类的内容测试映像是否存在,然后回显映像存在;fi
。我确信可以使用
docker service inspect
我很高兴。