使用外部数据库时,如何向Artifactory上传层超2GB的镜像?
解决方案:Artifactory外部数据库下上传超2GB镜像失败问题
问题根源
Artifactory默认使用外部数据库时,会将二进制文件(如Docker镜像层)存储在数据库的LOB字段中,SQL Server的LOB默认最大限制为2GB,PostgreSQL的JDBC协议也存在默认大对象传输限制,导致超2GB的文件无法写入。而使用本地PVC时,Artifactory默认将二进制文件存在文件系统,因此无此问题。
核心解决思路
修改Artifactory的Binary Store配置,将大二进制文件存储回PVC挂载的文件系统,仅用数据库存储元数据(或小文件缓存),避开数据库的大小限制。
具体实施步骤
调整Artifactory存储配置
在Kubernetes部署中,找到Artifactory的配置文件(如system.yaml,或通过Helm values.yaml配置),修改binaryStore部分:方案1:完全使用文件系统存储(推荐)
binaryStore: type: fileBinaryStore fileBinaryStore: path: "/var/opt/jfrog/artifactory/data/filestore"该路径需对应Kubernetes中Artifactory Pod挂载的PVC路径,确保Pod有读写权限。
方案2:缓存小文件+大文件存文件系统(兼顾性能)
若希望小文件存在数据库提升访问速度,大文件存文件系统,可使用cacheBinaryStore:binaryStore: type: cacheBinaryStore cacheBinaryStore: provider: type: fileBinaryStore fileBinaryStore: path: "/var/opt/jfrog/artifactory/data/filestore" cacheProvider: type: dbBinaryStore maxCacheSize: "100MB" # 可根据需求调整缓存阈值,超过阈值的文件存文件系统
重启Artifactory实例
应用配置后,重启Kubernetes中的Artifactory Pod,确保配置生效。验证修复效果
上传大于2GB的Docker镜像层,检查推送是否成功,同时查看Artifactory日志无BinaryDbException报错,且filestore目录下生成对应二进制文件。
额外注意事项
- 确保PVC有足够的存储空间容纳大文件,避免磁盘不足问题。
- 若坚持使用数据库存储大文件(不推荐),需针对PostgreSQL调整:
修改PostgreSQL JDBC连接参数,添加useLargeObjectAPI=true和sendBufferSize=16777216(16MB),并确保PostgreSQL服务器的max_large_object_size参数调整为大于2GB的值。但此方案性能较差,且仍可能存在协议层面限制,不建议采用。
内容的提问来源于stack exchange,提问作者user26302400
相关产品推荐
相关产品推荐

