Skip to content

Repository files navigation

Futu OpenD / moomoo OpenD Docker 镜像

GitHub Actions Workflow Status linux/amd64 linux/arm64 GitHub Release Date GitHub Release
Buy Me A Coffee

中文 | English


使用 Docker 运行 富途 OpenD 或 moomoo OpenD,并通过自动化流程检查上游版本更新。

本项目不是富途或 moomoo 官方项目。使用本项目造成的任何问题由使用者自行承担。

文档

快速开始

使用 docker run

以下示例使用富途镜像。login_pwd_md5 是登录密码的 32 位 MD5 十六进制字符串;不要把真实账号或密码提交到代码仓库。

docker run 使用主机目录绑定挂载,把 OpenD 的设备登录状态保存到当前目录。这样容器重启后通常不需要再次输入手机验证码,也不需要重复完成设备验证。

docker run -d \
  --name opend \
  --restart unless-stopped \
  -p 11111:11111 \
  -v ./futu-opend-state:/root/.com.futunn.FutuOpenD/F3CNN \
  ghcr.io/chasenlab/futu-opend:latest \
  /docker-entrypoint.sh \
  -login_account=<account number> \
  -login_pwd_md5=<md5 string> \
  -api_port=11111 \
  -api_ip=0.0.0.0 \
  -telnet_port=22222 \
  -lang=chs

使用 moomoo 镜像时,将镜像替换为 ghcr.io/chasenlab/moomoo-opend:latest,并将 -lang=chs 改为 -lang=en

更多启动参数请查看命令行 OpenD 文档

使用 Docker Compose

编辑 docker-compose.yml 后启动:

docker compose up -d

Compose 配置使用配置文件的绑定挂载和 Docker 命名卷保存 OpenD 状态。命名卷由 Docker 管理,不会在当前目录创建状态目录,例如:

services:
  opend:
    image: ghcr.io/chasenlab/futu-opend:latest
    restart: unless-stopped
    ports:
      - "11111:11111"
    volumes:
      - ./example.xml:/opend/FutuOpenD.xml:ro
      - futu-opend-state:/root/.com.futunn.FutuOpenD/F3CNN

volumes:
  futu-opend-state:

如果使用 moomoo 镜像,请挂载对应的 OpenD.xml,并使用 moomoo 专用状态目录 /root/.com.moomoo.OpenD/F3CNN

持久化手机验证码状态

首次登录或设备锁开启时,OpenD 可能要求输入手机验证码。验证码通过后,OpenD 会在状态目录中保存设备登录状态。容器重启时必须保留这个目录,否则可能再次触发验证码流程。

富途镜像使用以下目录:

/root/.com.futunn.FutuOpenD/F3CNN

使用 docker run 时,可以使用宿主机目录绑定挂载它:

-v ./futu-opend-state:/root/.com.futunn.FutuOpenD/F3CNN

使用 Docker Compose 时,请使用命名卷:

volumes:
  - futu-opend-state:/root/.com.futunn.FutuOpenD/F3CNN

moomoo 镜像使用不同的状态目录:

/root/.com.moomoo.OpenD/F3CNN

请为 moomoo 单独使用对应的命名卷或宿主机目录,避免与富途状态目录混用。

注意:

  • 只挂载 /opend/FutuOpenD.xml 不能保存验证码状态。
  • 不要把状态目录提交到 Git 或公开分享,其中可能包含设备登录信息。
  • 设备锁、账号、密码或登录环境发生变化时,仍可能需要重新验证。
  • 删除命名卷、PVC 或宿主机状态目录后,下一次登录可能再次要求验证码。

输入手机验证码

OpenD 启动后,可以通过 Telnet 运维端口发送操作命令。官方操作命令说明见中文文档英文文档

docker exec -it opend bash
telnet 127.0.0.1 22222
input_phone_verify_code -code=<verification code>

如果容器没有安装 bash,可以使用:

docker exec -it opend sh

配置文件

  • 富途:将 example.xml 挂载为 /opend/FutuOpenD.xml

  • moomoo:将配置文件挂载为 /opend/OpenD.xml,并按镜像要求设置启动参数。

  • 使用 login_pwd_md5 时,可以执行 md5 计算密码摘要:

    md5 -s '<your password>'

建议通过 Secret、环境变量或部署平台的密钥管理功能提供账号和密码,不要把真实凭据写入 XML、Compose 文件或命令历史。

镜像与架构

已发布镜像支持 linux/amd64linux/arm64。富途当前只提供 x86-64 OpenD 二进制文件,因此 ARM64 镜像通过 QEMU 用户态模拟运行,性能可能低于 AMD64。

从源码构建

git clone https://github.com/chasenlab/futu-opend.git
cd futu-opend

构建富途多架构镜像:

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --build-arg BRAND=Futu \
  --build-arg DOMAIN=futunn.com \
  --build-arg BIN_NAME=FutuOpenD \
  -t futu-opend \
  -f Dockerfile .

构建 moomoo 多架构镜像:

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --build-arg BRAND=moomoo \
  --build-arg DOMAIN=futustatic.com \
  -t moomoo-opend \
  -f Dockerfile .

本地运行时使用单一架构和 --load

docker buildx build --platform linux/arm64 --load \
  --build-arg BRAND=Futu \
  --build-arg DOMAIN=futunn.com \
  --build-arg BIN_NAME=FutuOpenD \
  -t futu-opend:arm64 .

测试

pip install -r requirements.txt
python main.py --addr <futu-opend-ip>

在中国大陆网络环境中,可以使用 PyPI 镜像:

pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

支持

get youtself link

Releases

Packages

Used by

Contributors

Languages