适用场景:ARM64 服务器,机器无法访问外网,通过离线镜像包完成 dbx 部署,比如信创环境,运维无windows系统,无法安装常用的一些运维工具等。
镜像版本:0.5.75-linuxarm64

一、环境说明
- 导出机器:可以联网的 arm64 Linux 机器,已安装 docker
- 目标机器:无外网 arm64 Linux 机器,仅安装 docker,不能 pull 镜像
- 镜像地址:swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/t8y2/dbx:0.5.75-linuxarm64
- 服务端口:物理机端口 4224,容器内部端口 4224
- 数据存储:Docker 命名卷 dbx-data,持久化路径由 docker 管理
端口小知识:-p 物理机端口:容器内部端口,4224:4224冒号左边是物理机宿主机端口,右边是容器内端口
二、步骤 1:联网机器拉取、导出镜像包
1.1 拉取镜像
执行命令:
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/t8y2/dbx:0.5.75-linuxarm641.2 重命名镜像标签
官方运行命令使用 t8y2/dbx:latest,离线导出的镜像提前打标签,避免 load 后镜像名不匹配。
执行命令:
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/t8y2/dbx:0.5.75-linuxarm64 t8y2/dbx:latest1.3 save 导出镜像为 tar 离线包
执行命令:
docker save -o dbx-arm64-0.5.75.tar t8y2/dbx:latest执行完成后,当前目录生成文件:dbx-arm64-0.5.75.tar
提示:docker save 不会自动删除本地镜像,导出完成后如需清理本地镜像执行下面命令:
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/t8y2/dbx:0.5.75-linuxarm64
docker rmi t8y2/dbx:latest1.4 拷贝离线包到无外网目标服务器
把 dbx-arm64-0.5.75.tar 通过 U 盘、scp、堡垒机等方式复制到离线 arm64 机器。
三、步骤 2:离线机器加载镜像并启动服务
2.1 加载 tar 镜像包
执行命令:
docker load -i dbx-arm64-0.5.75.tar加载成功输出类似:Loaded image: t8y2/dbx:latest
查看镜像确认加载成功:
docker images | grep dbx2.2 启动容器(离线适配版)
注意:离线环境必须去掉 --pull=always 参数,离线机器无法拉取网络镜像,该参数会直接报错。执行命令:
docker run -d --name dbx -p 4224:4224 -v dbx-data:/app/data t8y2/dbx:latest参数说明:
-d:后台守护进程运行容器--name dbx:容器命名为 dbx-p 4224:4224:端口映射,宿主机 4224 映射容器内部 4224-v dbx-data:/app/data:dbx-data:Docker 命名卷(docker 管理的物理磁盘目录,不是容器内临时目录)/app/data:容器内部目录- 容器删除,dbx-data 卷数据不会丢失,实现持久化存储
四、防火墙开放 4224 端口
根据你的 Linux 防火墙选择对应命令。
firewalld(CentOS、openEuler 等)
执行命令:
firewall-cmd --permanent --add-port=4224/tcp
firewall-cmd --reload
firewall-cmd --list-portsufw(Ubuntu / Debian)
执行命令:
ufw allow 4224/tcp
ufw reloadiptables 通用
执行命令:
iptables -A INPUT -p tcp --dport 4224 -j ACCEPT五、验证部署是否成功
执行以下命令验证:
docker ps | grep dbx
docker logs dbx
curl http://127.0.0.1:4224docker ps中 STATUS 显示 Up 代表容器正常运行curl有返回内容代表服务启动成功
六、常见问题与排错
问题 1:docker run 报错 pull 相关错误
原因:命令中带了 --pull=always,离线环境无法拉取镜像。
解决:删除该参数,使用本文提供的启动命令。
问题 2:端口外部无法访问
排查步骤:
- 确认容器状态
docker ps,容器必须为 Up 状态 - 确认系统防火墙放行 4224/tcp
- 如果是云服务器,检查安全组是否放行 4224 端口
- 检查 docker 内核 ipv4 转发是否开启
开启 ipv4 转发命令:
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p问题 3:数据卷 dbx-data 在哪里?
Docker 命名卷默认存放路径:
/var/lib/docker/volumes/dbx-data/_data不建议手动直接修改该目录,优先通过 docker 命令管理卷。
查看卷列表:
docker volume ls
docker volume inspect dbx-data备份数据卷命令:
docker run --rm -v dbx-data:/source -v $(pwd):/backup alpine tar -czvf /backup/dbx-data-backup.tar.gz -C /source .问题 4:停止 / 重启 / 删除服务
常用命令:
docker stop dbx
docker restart dbx
docker rm dbx
docker volume rm dbx-data注意:删除容器不会删除数据卷;执行 docker volume rm 才会清空业务数据,请谨慎操作。七、版本升级离线思路
- 联网机器拉取新版本 arm64 镜像,打 latest 标签,save 导出 tar 包
- 拷贝 tar 包到离线机器,load 加载新镜像
- 停止并删除旧容器(数据保存在 dbx-data 卷不受影响)
- 重新执行 run 命令启动新容器,复用旧 dbx-data 数据卷
八、补充知识点
- docker save 导出的是镜像完整文件,不会自动删除本机镜像
-p 宿主机端口:容器端口,冒号左边是物理机,右边是容器内部-v 卷名:容器内路径,冒号左边是宿主机存储,右边是容器内部路径- 离线环境绝对不能带
--pull=always,该参数会强制发起网络请求
dbx很不错,提供离线驱动,下载传到服务器上,基本上常见的数据库就都可以连接了。
评论
0成为第一个留下想法的人。