引入Minio依赖后Spotify Docker客户端暴露端口消失问题
我之前碰到过几乎一模一样的问题!大概率是MinIO 4.0.0依赖引入的Jackson版本和Spotify docker-client依赖的Jackson版本不兼容导致的,具体原因是:
Spotify docker-client底层依赖Jackson来序列化/反序列化Docker API的请求参数(包括端口绑定配置),而MinIO 4.0.0自带的Jackson版本和docker-client需要的版本不一致,导致端口绑定的配置在序列化时丢失,Docker daemon没收到正确的端口映射参数,所以容器运行正常但端口暴露失效。
给你几个可行的解决步骤:
第一步:排查依赖冲突
先确认是不是Jackson版本冲突导致的,用你的构建工具查看依赖树:- Maven用户执行:
mvn dependency:tree | grep jackson - Gradle用户执行:
./gradlew dependencies | grep jackson
你会看到MinIO和docker-client依赖的Jackson核心包(jackson-databind、jackson-core等)版本不一样。
- Maven用户执行:
第二步:统一Jackson版本
在项目的依赖管理中强制指定和Spotify docker-client兼容的Jackson版本,举个例子:
如果你的docker-client依赖的是Jackson 2.13.x系列,Maven可以这么配置:<dependencyManagement> <dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.4.2</version> <!-- 替换成你docker-client实际依赖的版本 --> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.13.4</version> </dependency> </dependencies> </dependencyManagement>Gradle用户可以在
build.gradle里添加:configurations.all { resolutionStrategy.force 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2' resolutionStrategy.force 'com.fasterxml.jackson.core:jackson-core:2.13.4' }第三步:验证修复效果
重新构建项目后启动容器,用docker ps命令查看容器的端口映射情况,应该能看到类似0.0.0.0:4444->5432/tcp的配置了,端口绑定也能正常工作。
如果统一版本后还是有问题,你可以试试升级Spotify docker-client到最新稳定版,或者降级MinIO到3.x系列(这个版本的Jackson依赖和多数docker-client版本更兼容),不过优先统一依赖版本是最稳妥的方案。
内容的提问来源于stack exchange,提问作者Kratos

