在企业内网或受限环境中,经常无法直接从公网拉取 Docker 镜像。这时可以通过“离线镜像迁移”的方式,将 B 机器上的镜像导入到 A 机器中使用。
本文以 plantuml/plantuml-server:jetty 为例,结合 Portainer 管理界面,讲解完整流程。
一、整体流程
B机器(有网)
↓ docker pull
↓ docker save
↓ 拷贝 tar 文件
A机器(内网)
↓ 上传到 Portainer
↓ 导入镜像
↓ 创建容器运行
二、在 B 机器导出镜像
1. 拉取镜像
docker pull plantuml/plantuml-server:jetty
2. 导出镜像
docker save -o plantuml-server.tar plantuml/plantuml-server:jetty
生成文件:
plantuml-server.tar
三、传输到 A 机器
可以使用以下方式:
- scp
- U 盘
- Samba / FTP
示例:
scp plantuml-server.tar user@A机器IP:/home/user/
四、通过 Portainer 导入镜像
1. 登录 Portainer
http://A机器IP:9000
2. 进入镜像管理
左侧菜单:
Images
3. 上传镜像
- 点击 Load image
- 选择
plantuml-server.tar - 点击 Upload
上传完成后,你会看到镜像:
plantuml/plantuml-server:jetty
五、创建容器
1. 新建容器
进入:
Containers → Add container
2. 基本配置
- Name:plantuml-server
- Image:plantuml/plantuml-server:jetty
3. 端口映射
Host: 8080
Container: 8080
4. 启动
Deploy the container
六、访问验证
浏览器访问:
http://A机器IP:8080
接口测试:
http://A机器IP:8080/plantuml/png/SoWkIImgAStDuNBCoKnELT2rKt3AJx9IqBLJSCfFibBmICt9oGS0
如果能看到 UML 图片,说明部署成功。
七、常见问题
1. 端口无法访问
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
2. Docker 未启动
systemctl start docker
3. Portainer 上传失败
可以使用命令行导入:
docker load -i plantuml-server.tar
八、进阶建议
生产环境建议:
- 不要直接暴露容器端口
- 使用 Nginx 或 API 网关统一入口
- 接入认证系统(如 OAuth2)
用户 → 网关 → PlantUML Server
九、总结
docker pull → docker save → 传输 → docker load / Portainer导入 → 运行容器
该方案适用于所有 Docker 镜像,是内网部署的重要基础能力。