如何在CVAT中永久允许访问私有网络S3存储?
CVAT访问本地S3存储的私有网络权限永久解决方法
问题背景
通过docker-compose部署CVAT后,访问本地Docker容器中的S3存储时出现报错:
- UI提示:
无法创建云存储资源:资源<my-bucket>未找到,可能已被删除 - 后台日志显示:请求因规则
Deny: Private Range被拒绝,目标IP为S3容器的动态私有IP(如172.18.0.12)
临时设置环境变量SMOKESCREEN_OPTS=--allow-address=xxx可临时解决,但S3容器IP不固定,重启后失效。需要实现永久允许私有网络访问的配置。
永久解决方案:固定子网并允许整个网段
步骤1:配置S3容器的固定子网
修改S3(如MinIO)的docker-compose.yml,指定自定义网络并设置固定子网:
# /opt/minio/docker-compose.yml networks: s3minio: name: "s3minio" external: false # 在此处创建网络 ipam: config: - subnet: 172.99.0.0/16 # 自定义私有子网,后续CVAT将允许该网段
步骤2:配置CVAT允许该私有网段
修改CVAT的.env文件,设置SMOKESCREEN_OPTS允许整个固定子网:
# /opt/cvat/.env SMOKESCREEN_OPTS=--allow-range=172.99.0.0/16
步骤3:重启服务
分别重启S3和CVAT的docker-compose服务,使配置生效:
# 重启S3服务 cd /opt/minio && docker compose up -d # 重启CVAT服务 cd /opt/cvat && docker compose up -d
临时替代方案
如果暂时无法配置固定子网,可使用以下临时方案:
方案1:脚本自动获取S3容器IP并添加允许规则
创建脚本set_allow_address_smokescreen_opts_in_cvat.sh,自动获取S3容器的当前IP并更新CVAT的环境变量:
# set_allow_address_smokescreen_opts_in_cvat.sh NETWORK=s3minio # 替换minio-nginx-1为你的S3容器名称 printf 'SMOKESCREEN_OPTS=--allow-address=%s\n' $( docker inspect minio-nginx-1 | jq -r "map(.NetworkSettings.Networks.$NETWORK.IPAddress)[]") >> /opt/cvat/.env docker compose -f /opt/cvat/docker-compose.yml up -d
运行脚本即可临时生效,可将脚本加入开机自启或定时任务,避免每次重启后手动操作。
内容的提问来源于stack exchange,提问作者viktorkho
相关产品推荐
相关产品推荐

