Skip to content

ThingsBoard 使用 msa 构建镜像 ​

正文与配图来自原稿。侧重:远程 Docker + 启用 msa 构建 + 常见报错处理。
模块对照、推 Harbor 等可对照:使用 msa 构建镜像并上传到 Harbor。

1、配置远程 Docker ​

1.1、修改服务器 Docker 开启远程访问 ​

编辑:

bash
vi /usr/lib/systemd/system/docker.service

找到 [Service] 节点,修改 ExecStart,增加 -H tcp://0.0.0.0:2375:

text
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

修改 docker.service

重新加载使配置生效:

bash
systemctl daemon-reload
systemctl restart docker

生产环境直接暴露 2375 无 TLS 有风险,仅建议内网 / 临时构建机使用;正式环境请用 TLS 或 SSH 隧道。

1.2、Windows 本地配置 Docker 环境变量 ​

在 Windows 环境变量中配置远程 Docker 地址。Maven 构建时会读取 DOCKER_HOST:

配置 DOCKER_HOST

示例:

text
变量名:DOCKER_HOST
变量值:tcp://你的服务器IP:2375

配置后重新打开 IDEA / 终端,使变量生效。

2、启用 msa 打镜像 ​

2.1、修改 msa 模块的 pom 配置 ​

在 msa 模块(父 pom)的 <properties> 中启用 Dockerfile 构建,并设置仓库命名空间(须小写,见下文排错):

xml
<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 描述符那一段):

xml
<!--
<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 检查 ​

报错示例:

text
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、仓库名称必须为小写 ​

报错示例:

text
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 主机上看到生成的镜像:

构建成功日志 / 镜像

docker images 列表


补充(辅) ​

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

相关文章 ​