You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-Compose+Minio环境下UnknownHostException问题求助

Minio本地测试UnknownHostException问题排查

背景

通过Docker-Compose部署Minio与业务应用开展S3本地测试:

  • 本地Linux机器可正常访问Minio控制台
  • 调用业务应用archive-api-app的API时,抛出UnknownHostException: alc-vbox-testarchiveservice.minio
  • 目标桶名为alc-vbox-testarchiveservice

Docker-Compose配置文件

version: "2.1"

services:
  minio:
    image: minio/minio
    container_name: minio
    ports:
      - 9001:9001
    volumes:
      - minio_storage:/data
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
      MINIO_REGION: us-east-1
    command: server /data --console-address ":9001"
    mem_limit: 512m

  populate-minio-data:
    container_name: "minio-data"
    image: minio/mc
    volumes:
      - ./hello.txt:/tmp/hello.txt
    entrypoint: >
      /bin/sh -c "
      /usr/bin/mc config host rm local;
      /usr/bin/mc config host add --quiet --api s3v4 local http://minio:9001 minio minio123;
      /usr/bin/mc mb --quiet local/somebucketname1/;
      /usr/bin/mc policy set public local/somebucketname1;
      /usr/bin/mc cp /tmp/hello.txt local/somebucketname1/hello.txt;
      "
    depends_on:
      - minio


  archive-api-app:
    image: openjdk:11
    container_name: "archive-api-app"
    ports:
      - 8091:6001
    volumes:
      - /home/apcuser/dev/projects/ea-archive-service-v2/projects/application/archive-api:/app
    command: [ 'java', '-jar', '/app/build/libs/archive-api-1.0.0.jar' ]
    env_file:
      - ./vars/default.env

volumes:
  minio_storage:

AmazonS3客户端配置代码

@Bean
public AmazonS3 getS3Client() {
    return AmazonS3ClientBuilder.standard()
            .withClientConfiguration(new ClientConfiguration().withMaxConnections(maxConnections)
                    .withConnectionTimeout(connectionTimeout).withMaxErrorRetry(maxRetry))
        .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://minio:9001", "us-east-1"))
            .build();
}

错误日志片段

archive-api            |    at java.base/java.lang.Thread.run(Thread.java:829)
archive-api            | Caused by: java.net.UnknownHostException: alc-vbox-testarchiveservice.minio
archive-api            |    at java.base/java.net.InetAddress$CachedAddresses.get(InetAddress.java:797)
archive-api            |    at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1519)
archive-api            |    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1378)
archive-api            |    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1306)
archive-api            |    at com.amazonaws.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:27)
archive-api            |    at com.amazonaws.http.DelegatingDnsResolver.resolve(DelegatingDnsResolver.java:38)
archive-api            |    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:112)
archive-api            |    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
archive-api            |    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
archive-api            |    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
archive-api            |    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
archive-api            |    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
archive-api            |    at com.amazonaws.http.conn.ClientConnectionManagerFactory$Handler.invoke(ClientConnectionManagerFactory.java:76)
archive-api            |    at com.amazonaws.http.conn.$Proxy97.connect(Unknown Source)
archive-api            |    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
archive-api            |    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
archive-api            |    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
archive-api            |    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
archive-api            |    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
archive-api            |    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
archive-api            |    at com.amazonaws.http.apache.client.impl.SdkHttpClient.execute(SdkHttpClient.java:72)
archive-api            |    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1346)
archive-api            |    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1157)
archive-api            |    ... 77 more

问题原因

这是由于Amazon S3客户端默认采用虚拟主机样式(Virtual Host Style)构造请求地址:当访问名为alc-vbox-testarchiveservice的桶时,客户端会自动将请求地址拼接为alc-vbox-testarchiveservice.minio,而非http://minio:9001/alc-vbox-testarchiveservice这种路径样式(Path Style)格式。

在Docker Compose默认网络中,仅minio主机名可被正常解析,alc-vbox-testarchiveservice.minio这个组合域名不存在,因此触发DNS解析失败,抛出UnknownHostException。

解决方案

方案1:强制启用路径样式访问(推荐本地测试使用)

修改AmazonS3客户端配置,添加.withPathStyleAccessEnabled(true),强制客户端使用路径样式构造请求地址:

@Bean
public AmazonS3 getS3Client() {
    return AmazonS3ClientBuilder.standard()
            .withClientConfiguration(new ClientConfiguration().withMaxConnections(maxConnections)
                    .withConnectionTimeout(connectionTimeout).withMaxErrorRetry(maxRetry))
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://minio:9001", "us-east-1"))
            .withPathStyleAccessEnabled(true) // 启用路径样式访问
            .build();
}

修改后,客户端会以http://minio:9001/alc-vbox-testarchiveservice格式发起请求,避免生成无法解析的虚拟主机域名。

方案2:配置自定义域名与DNS映射(适合生产环境)

若需保留虚拟主机样式访问,可按以下步骤操作:

  1. 在Minio中配置桶的自定义域名
  2. 在业务应用容器的/etc/hosts中添加映射规则:alc-vbox-testarchiveservice.minio [Minio容器IP]
    此方式配置相对复杂,本地测试不推荐。

内容的提问来源于stack exchange,提问作者Anshita Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:15:34