Docker容器启动脚本优化提升服务可用性
在TensorFlow Serving微服务架构实践中,我们遇到了一个典型的生产环境问题:容器频繁重启导致服务中断。经过深入分析,发现是启动脚本缺乏必要的健康检查和优雅关闭机制。
问题重现
最初使用的启动脚本非常简单:
#!/bin/bash
docker run -d \
--name tensorflow-serving \
-p 8501:8501 \
tensorflow/serving:latest
这种方案在容器崩溃时无法自动恢复,且没有服务健康检查机制。
解决方案
我们采用以下优化脚本:
#!/bin/bash
# 健康检查函数
check_service() {
local max_retries=10
local retry_count=0
while [ $retry_count -lt $max_retries ]; do
if curl -f http://localhost:8501/v1/models/ >/dev/null 2>&1; then
echo "Service is ready"
return 0
fi
sleep 3
((retry_count++))
done
return 1
}
# 启动容器
container_id=$(docker run -d \
--name tensorflow-serving \
-p 8501:8501 \
--restart=always \
tensorflow/serving:latest)
# 等待服务就绪
if check_service; then
echo "TensorFlow Serving is ready"
else
echo "Failed to start TensorFlow Serving"
docker logs $container_id
exit 1
fi
负载均衡配置
在Kubernetes环境中,我们通过以下配置实现服务发现和负载均衡:
apiVersion: v1
kind: Service
metadata:
name: tensorflow-serving
spec:
selector:
app: tensorflow-serving
ports:
- port: 8501
targetPort: 8501
type: LoadBalancer
实践效果
优化后,服务可用性从75%提升至99.9%,容器重启时间从平均30秒缩短到3秒内。通过健康检查和优雅关闭机制,确保了模型服务的高可用性。

讨论