Docker环境下Label Studio ML后端无法访问图片路径求助
解决Label Studio-ML后端Docker容器访问Label Studio容器图片的问题
问题根源
Docker容器内的localhost指向容器自身,而非宿主机或其他容器,所以ML后端用localhost:8080访问Label Studio容器会被拒绝。核心解决思路是让两个容器处于同一Docker网络,使用容器名称作为访问地址。
具体解决方案
1. 创建共享Docker网络
先为两个容器创建专属共享网络,确保它们能互相发现:
docker network create label-studio-shared-net
2. 重新启动容器并加入共享网络
- Label Studio容器启动命令示例(调整挂载目录和端口为你的实际配置):
docker run -d --name label-studio --network label-studio-shared-net -p 8080:8080 -v ./local-label-studio-data:/data heartexlabs/label-studio:latest
- Label Studio ML后端容器启动命令示例:
docker run -d --name label-studio-ml --network label-studio-shared-net -p 9090:9090 -v ./local-ml-data:/data heartexlabs/label-studio-ml-backend:latest
3. 修正ML后端访问Label Studio的地址
将ML后端配置中访问Label Studio的地址从localhost:8080改为Label Studio的容器名称(如上述的label-studio),即http://label-studio:8080。
如果是通过环境变量配置,启动ML后端时添加参数:
docker run -d --name label-studio-ml --network label-studio-shared-net -e LABEL_STUDIO_URL=http://label-studio:8080 -p 9090:9090 -v ./local-ml-data:/data heartexlabs/label-studio-ml-backend:latest
4. 验证网络连通性
进入ML后端容器,测试能否访问目标图片:
docker exec -it label-studio-ml curl http://label-studio:8080/data/upload/1/0c8720ce-0f29e9df11dbc1cce55cb3529517dcd5.jpg
若能正常返回图片内容,说明网络配置生效。
备选方案:直接共享文件挂载
如果ML后端需要直接读取文件而非通过API,可将Label Studio的/data目录同步挂载到ML后端容器:
docker run -d --name label-studio-ml --network label-studio-shared-net -e LABEL_STUDIO_URL=http://label-studio:8080 -p 9090:9090 -v ./local-label-studio-data:/label-studio-data heartexlabs/label-studio-ml-backend:latest
之后在ML后端代码中调整文件路径为/label-studio-data/upload/...即可。
内容的提问来源于stack exchange,提问作者Anas Arodake
相关产品推荐
相关产品推荐

