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

在CDK打包流程中运行amazon/dynamodb-local的问题

解决方案:自动创建Docker网络,实现CDK打包时DynamoDB Local与构建容器协同运行

问题原因

你遇到的错误是因为java-build-local网络在Docker主机上尚未创建:CDK的bundling配置仅指定构建容器加入该网络,不会自动创建;而Maven的Docker插件尝试将DynamoDB Local容器接入不存在的网络,导致启动失败。


方案1:在构建命令中提前创建网络

直接修改CDK bundling的执行命令,在运行Maven构建前检查并创建目标网络(利用挂载的docker.sock在容器内执行Docker命令):

this.function = new lambda.Function(this, "Function", {
    runtime: lambda.Runtime.JAVA_21,
    code: lambda.Code.fromAsset(`../assets-java/${props.serviceName}`, {
        bundling: {
            command: [
                "/bin/sh",
                "-c",
                // 先检查网络是否存在,不存在则创建
                `docker network inspect java-build-local >/dev/null 2>&1 || docker network create java-build-local; mvn clean install && cp /asset-input/target/${props.serviceName}-1.0.jar /asset-output/`,
            ],
            // 其余配置保持不变
            image: lambda.Runtime.JAVA_21.bundlingImage,
            bundlingFileAccess: cdk.BundlingFileAccess.VOLUME_COPY,
            user: "root",
            outputType: cdk.BundlingOutput.ARCHIVED,
            network: "java-build-local",
            volumes: [
                {
                    hostPath: process.env["HOME"] + "/.m2/",
                    containerPath: "/root/.m2/"
                },
                {
                    hostPath: "/var/run/docker.sock",
                    containerPath: "/var/run/docker.sock"
                }
            ],
        }
    }),
    // 其余配置保持不变
    handler: props.handler,
    logRetention: RetentionDays.THREE_MONTHS,
    timeout: Duration.minutes(5),
    environment: {
        ...props.env,
        "JAVA_TOOL_OPTIONS": "-Dlog4j.configurationFile=log4j2.xml"
    }
})

方案2:通过Maven Docker插件自动创建网络

修改docker-maven-plugin的配置,添加网络自动创建规则,插件会在启动容器前检查并创建目标网络:

<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.38.0</version>
<executions>
  <execution>
    <id>start-docker-container</id>
    <phase>generate-test-resources</phase>
    <goals>
      <goal>start</goal>
    </goals>
  </execution>
  <execution>
    <id>stop-docker-container</id>
    <phase>prepare-package</phase>
    <goals>
      <goal>stop</goal>
    </goals>
  </execution>
</executions>
<configuration>
  <!-- 添加网络自动配置 -->
  <networks>
    <network>
      <name>java-build-local</name>
      <create>
        <enabled>true</enabled>
        <!-- 可选:默认桥接模式,如需自定义可修改 -->
        <driver>bridge</driver>
      </create>
    </network>
  </networks>
  <images>
    <image>
      <name>amazon/dynamodb-local</name>
      <run>
        <ports>
          <port>8123:8000</port>
        </ports>
        <network>
          <name>java-build-local</name>
          <alias>dynamodb-local</alias>
        </network>
      </run>
    </image>
  </images>
</configuration>
</plugin>

额外注意事项

  • 由于你已将主机的docker.sock挂载到构建容器内,容器拥有执行Docker命令的权限,两种方案均可正常生效。
  • 打包完成后可通过docker network rm java-build-local清理临时网络,避免资源残留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:48:15