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

如何在GCP Cloud Build中访问fabric8 Docker Maven Plugin启动的服务?

解决GCP Cloud Build中Docker Maven Plugin测试环境连接问题

核心问题分析

Cloud Build的构建环境里,构建容器和你通过Docker Maven Plugin启动的容器默认都在cloudbuild网络中。本地测试时你依赖宿主机器的端口映射访问服务,但Cloud Build里测试代码运行在构建容器内,需要通过容器网络直接访问,而非localhost或端口映射。

具体解决步骤

1. 为Docker Maven Plugin指定cloudbuild网络

在pom.xml的docker-maven-plugin配置中,全局或为每个容器指定使用cloudbuild网络,同时移除不必要的宿主端口映射(同网络内可直接通过容器名访问):

<plugin>
  <groupId>io.fabric8</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>你的插件版本</version>
  <configuration>
    <!-- 全局配置所有容器加入cloudbuild网络 -->
    <network>cloudbuild</network>
    <images>
      <!-- PostgreSQL容器配置 -->
      <image>
        <name>postgres:14</name>
        <run>
          <env>
            <POSTGRES_USER>test_user</POSTGRES_USER>
            <POSTGRES_PASSWORD>test_pass</POSTGRES_PASSWORD>
            <POSTGRES_DB>test_db</POSTGRES_DB>
          </env>
          <!-- 等待PostgreSQL端口就绪再启动后续容器 -->
          <wait>
            <tcp>
              <port>5432</port>
              <time>30000</time>
            </tcp>
          </wait>
        </run>
      </image>
      <!-- REST服务器容器配置 -->
      <image>
        <name>your-rest-server-image:latest</name>
        <run>
          <!-- 给容器设置别名,方便测试代码访问 -->
          <alias>rest-server</alias>
          <env>
            <!-- 用PostgreSQL容器名访问数据库,同网络内直接解析 -->
            <SPRING_DATASOURCE_URL>jdbc:postgresql://postgres:5432/test_db</SPRING_DATASOURCE_URL>
          </env>
          <!-- 依赖PostgreSQL容器启动完成 -->
          <dependsOn>
            <container>postgres:14</container>
          </dependsOn>
        </run>
      </image>
    </images>
  </configuration>
  <executions>
    <execution>
      <id>start-containers</id>
      <phase>pre-integration-test</phase>
      <goals>
        <goal>start</goal>
      </goals>
    </execution>
    <execution>
      <id>stop-containers</id>
      <phase>post-integration-test</phase>
      <goals>
        <goal>stop</goal>
      </goals>
    </execution>
  </executions>
</plugin>

2. 修改测试代码的访问地址

将测试中访问REST服务器的地址从localhost:8080改为容器别名(或容器名),示例:

// 原本地测试地址
// String baseUrl = "http://localhost:8080";
// 修改为Cloud Build网络内的访问地址
String baseUrl = "http://rest-server:8080";

3. 验证容器启动顺序与就绪状态

配置中的<wait>和<dependsOn>会确保REST服务器在PostgreSQL完全就绪后再启动,避免因数据库未就绪导致的连接异常。

4. Cloud Build构建配置注意事项

在cloudbuild.yaml中无需额外配置端口映射,只需保证构建步骤执行mvn verify即可,示例:

steps:
- name: 'maven:3.8.6-openjdk-11'
  args: ['verify']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:45:31