Docker部署TensorFlow Serving如何获取正确的访问URL?
问题原因及解决方案
你遇到的连接拒绝报错并非URL错误,核心问题出在TensorFlow Serving的监听地址配置上:
从容器日志可以看到REST接口绑定的是
localhost:8501,该地址仅允许容器内部进程访问,宿主机或外部网络的请求无法触达,即使配置了端口映射也无法生效。
修复步骤
1. 修改服务配置,让HTTP接口监听所有地址
任选以下一种方式修改即可:
方式1:修改docker-compose配置,覆盖启动命令
给服务添加command字段,显式指定HTTP服务绑定0.0.0.0地址:
tensorflow-servings: container_name: tfserving_classifier build: ./some_model_dir ports: - 8501:8501 # 如需使用gRPC接口可额外添加8500端口映射 # - 8500:8500 command: --rest_api_port=8501 --rest_api_address=0.0.0.0 --model_name=model --model_base_path=/models/model
方式2:修改Dockerfile,内置启动参数
在原Dockerfile末尾添加CMD指令:
FROM tensorflow/serving COPY /model_dir /models/model/ CMD ["--rest_api_port=8501", "--rest_api_address=0.0.0.0", "--model_name=model", "--model_base_path=/models/model"]
2. 获取正确的访问URL
修改配置后重新启动容器,待服务启动完成后:
- 如果你在宿主机本地调用服务,原URL无需修改,就是
http://localhost:8501/v1/models/model/1:predict - 如果你在局域网其他设备调用服务,将localhost替换为宿主机的局域网IP即可,示例:
http://192.168.3.24:8501/v1/models/model/1:predict
你可以先在宿主机执行curl http://localhost:8501/v1/models/model验证服务可达性,若返回模型状态信息,再运行预测代码即可。
内容的提问来源于stack exchange,提问作者Joseph Adam
相关产品推荐
相关产品推荐

