1 前言

众所周知,现阶段的鸿蒙 PC 原生环境尚不支持直接运行 Docker、Podman 等容器引擎。不仅如此,其官方提供的“融合开发引擎”(虚拟机)也由于未开启相关的内核选项,导致所有容器化技术折戟。

对于工作内容强依赖容器技术的开发者而言,要在鸿蒙 PC 上推进日常工作,传统的做法要么是套一层更沉重的第三方全量虚拟机,要么是频繁 SSH 到远程服务器中去操作。这两种方式要么拖慢系统性能,要么割裂开发体验,显得极其繁琐。

本文将推荐一种体验更好、但在社区中鲜少被提及的玩法:在鸿蒙 PC 上部署轻量化的 Docker CLI(客户端),远程对接服务器上的 Docker Engine(服务端)。通过 C/S 架构的天然隔离性,实现“本地无缝敲命令,远程丝滑跑容器”的极致体验。

2 前置准备

2.1 开发环境

  • 客户端:一台鸿蒙 PC。
  • 服务端:一台安装好 Docker Engine 的 Linux 服务器(确保其 SSH 端口对鸿蒙 PC 网络可达)。

2.2 配置 SSH 免密登录

为了让 Docker CLI 能够无感地穿透到远程,我们需要配置好 SSH 公钥认证。

PC 上的操作(免交互一键生成):

# 生成 ssh 密钥对
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519

# 查看并复制你的 ssh 公钥
cat ~/.ssh/id_ed25519.pub

服务器上的操作:

# 将上一步复制的公钥追加到服务器的授权列表中
echo "ssh-ed25519 AAAA..." >> ~/.ssh/authorized_keys

配置完成后,务必在本地手动执行一次 ssh user@remote-ip 登录远程服务器。这是为了将远程主机的指纹(Fingerprint)写入本地的 known_hosts 中。若跳过此步,后续 Docker 建立连接时会因安全提示拦截而失败。

2.3 安装 Docker CLI

首先在 PC 上安装 Harmonybrew,然后执行 brew install docker,即可完成 Docker CLI 的安装。

Harmonybrew 的安装方式请参考社区文档:https://atomgit.com/Harmonybrew

3 操作流程

3.1 方法 1:使用 Docker Context

Docker 内置了 context(上下文)功能,允许你在本地无缝切换不同的 Docker 后端(本地的、远程的、云端的)。它支持通过 SSH 连接,无需开放额外的端口,非常安全。

操作流程(在 PC 上操作):

# 在本地创建一个新的上下文(若非22端口,可在 IP 后加上 :端口号)
docker context create my-remote-server --docker "host=ssh://user@remote-ip"

# 切换到该上下文
docker context use my-remote-server

# 验证连接,你会发现显示的已经是远程服务器上的容器信息了
docker info
docker ps

该配置完全持久化。即使重启鸿蒙 PC 或新建终端窗口,默认连接依然会保持在远程服务器上。如果需要切回本地(若本地未来支持),只需执行 docker context use default

3.2 方法 2:使用环境变量 DOCKER_HOST

如果你不想创建 Context,也可以直接设置环境变量。这种方式同样支持 SSH。

# 将你的 ssh 连接信息填入这个变量
export DOCKER_HOST="ssh://user@remote-ip"

# 验证连接
docker info
docker ps

此操作仅临时生效,重新进入终端后 DOCKER_HOST 环境变量会丢失,配置将恢复原状。如果需要持久化生效,可以将环境变量写入 ~/.zshrc 等配置文件中。

4 典型应用场景与实战

以我当前维护的 Harmonybrew 项目为例,在日常开发中,我频繁需要让 AI Agent 在鸿蒙容器环境中动态修改代码、编译软件包(formula),同时我又需要在鸿蒙 PC 真机上实时调试编译出来的二进制制品。

通过这套方案,我只需要在鸿蒙 PC 上启动一个 AI Agent 实例:

  • 它发出的 docker run/exec 能够直接控制远程的鸿蒙容器进行云端编包。
  • 编包完成后,通过本地指令直接拉回真机进行原生跑测。

一套代码,两套环境,一个 Agent 丝滑调度,全流程闭环。

5 方案局限性与避坑指南

尽管这种架构非常高产,但由于物理实体和运行实体分离,存在一个天然的“空间错觉”:

  1. 目录挂载问题:当你执行 docker run -v /data:/app ... 时,这里的 /data 指的是远程服务器的宿主机路径,而非鸿蒙 PC 本地的路径。
  2. 网络端口问题:-p 8080:80 映射出来的 8080 端口是在远程服务器上,你在鸿蒙 PC 上访问 localhost:8080 是打不开的。

推荐的解法与规避措施:

  1. 文件拷贝:放弃 -v 挂载,利用 Docker 专为 C/S 架构设计的 docker cp 命令。通过 docker cp ./local-file container:/app 可以直接通过网络把本地文件推过去。
  2. 端口转发:如果需要访问容器暴露的端口,可以配合标准的 SSH 隧道进行本地端口映射。例如这样:ssh -NfL 9090:localhost:8080 user@remote-ip,此时你在 PC 上访问自己的 9090 端口,报文会被转发到服务器的 8080 端口上。
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐