ThingsBoard 使用 msa 构建镜像
正文与配图来自原稿。侧重:远程 Docker + 启用 msa 构建 + 常见报错处理。
模块对照、推 Harbor 等可对照:使用 msa 构建镜像并上传到 Harbor。
1、配置远程 Docker
1.1、修改服务器 Docker 开启远程访问
编辑:
vi /usr/lib/systemd/system/docker.service找到 [Service] 节点,修改 ExecStart,增加 -H tcp://0.0.0.0:2375:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
重新加载使配置生效:
systemctl daemon-reload
systemctl restart docker生产环境直接暴露
2375无 TLS 有风险,仅建议内网 / 临时构建机使用;正式环境请用 TLS 或 SSH 隧道。
1.2、Windows 本地配置 Docker 环境变量
在 Windows 环境变量中配置远程 Docker 地址。Maven 构建时会读取 DOCKER_HOST:

示例:
变量名:DOCKER_HOST
变量值:tcp://你的服务器IP:2375配置后重新打开 IDEA / 终端,使变量生效。
2、启用 msa 打镜像
2.1、修改 msa 模块的 pom 配置
在 msa 模块(父 pom)的 <properties> 中启用 Dockerfile 构建,并设置仓库命名空间(须小写,见下文排错):
<properties>
<main.dir>${basedir}/..</main.dir>
<!--
<docker.repo>thingsboard</docker.repo>
<dockerfile.skip>true</dockerfile.skip>
-->
<docker.repo>hikarithings</docker.repo>
<dockerfile.skip>false</dockerfile.skip>
<blackBoxTests.skip>true</blackBoxTests.skip>
<dockerfile-maven.version>1.4.13</dockerfile-maven.version>
<docker.push-arm-amd-image.phase>none</docker.push-arm-amd-image.phase>
</properties>dockerfile.skip=false:install 时真正执行 Docker 构建docker.repo:镜像仓库前缀 / 项目名(小写)
然后对工程执行 mvn clean install(或 IDEA 里对 root / 相关模块点 install)。需已设置 DOCKER_HOST。
3、报错解决
3.1、去掉 Windows 打包
若 Windows 上打 Linux 镜像时被 assembly 拖慢或报错,可在主 pom中注释掉 maven-assembly-plugin(windows 描述符那一段):
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<finalName>${pkg.name}</finalName>
<descriptors>
<descriptor>${main.dir}/packaging/${pkg.type}/assembly/windows.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>assembly</id>
<phase>${pkg.package.phase}</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
-->3.2、注释掉 license 检查
报错示例:
Failed to execute goal com.mycila:license-maven-plugin:3.0:check (default) on project application:
Some files do not have the expected license header在主 pom 中把整段 com.mycila:license-maven-plugin 注释掉即可(本地临时绕过)。完整插件块较长,与 本地编译常见问题 中 license 一节相同:注释整个 <plugin>…</plugin>,或给新文件补上 license 头 / 使用 license:format。
3.3、仓库名称必须为小写
报错示例:
Failed to execute goal com.spotify:dockerfile-maven-plugin:1.4.13:build
(build-docker-tb-postgres-image) on project tb:
Repo name "Hikarithings/tb-postgres" must contain only lowercase, numbers, '-', '_' or '.'.原因:msa 的 <docker.repo> 必须全小写。例如写成 Hikarithings 会失败,应改为 hikarithings(见上文 properties 示例)。
4、成功
构建成功后,可在远程 Docker 主机上看到生成的镜像:


补充(辅)
- 推送到 Harbor:镜像打好后按 上传到 Harbor 打标签并
docker push。 - 加速编译可加
-T 1C,见下一篇 提高 Maven 编译速度。 - 注释 license / assembly 仅适合本机;对外贡献请保留检查并补齐头部。
