首先登录云服务器,将需要传输的镜像保存为 .tar 格式的文件:


bash

# 语法:docker save -o [导出的文件名.tar] [镜像名:标签]
docker save -o my_image.tar nginx:latest  # 示例:导出nginx镜像

从云服务器下载文件到局域网机器

局域网机器可直接通过互联网访问云服务器,主动拉取文件(无需云服务器反向访问内网),步骤如下:


  1. 在局域网目标机器上操作(发起端是局域网机器)
    利用 scp(基于 SSH)或 wget/curl(若文件通过 HTTP 服务暴露)直接从云服务器下载:

    • 用 scp 拉取(云服务器需开启 SSH 服务,端口通常为 22):

      bash

      # 语法:scp [云服务器用户名@云服务器公网IP:云服务器上的文件路径] [局域网机器本地保存路径]
      scp root@云服务器公网IP:/path/to/my_image.tar /home/局域网用户/local_dir/
      


      执行后输入云服务器的登录密码(或使用 SSH 密钥免密),文件会直接下载到局域网机器的指定路径。

    • 用 wget/curl 拉取(若云服务器通过 Nginx/Apache 等暴露了文件下载链接):

      bash

      # wget示例(需云服务器提供可访问的URL)
      wget https://云服务器公网IP:端口/path/to/my_image.tar -P /home/局域网用户/local_dir/
      
      # curl示例
      curl -O https://云服务器公网IP:端口/path/to/my_image.tar -o /home/局域网用户/local_dir/my_image.tar
      

场景 2:局域网内机器间传输文件

局域网内机器本身已互通(与是否能访问互联网无关),可直接通过内网 IP 传输,常用方式:


  1. scp/sftp 传输(适用于 Linux/macOS,Windows 可通过 WSL 或工具):
    在局域网内的源机器(如 A 机器)上执行,将文件推送到同局域网的目标机器(如 B 机器):

    bash

    # 语法:scp [A机器上的文件路径] [B机器用户名@B机器内网IP:B机器目标路径]
    scp /home/A用户/local_file.tar B用户@192.168.1.101:/home/B用户/
    

实例1:在云服务器上操作
ubuntu@10-7-127-87:~$ docker images
REPOSITORY                 TAG       IMAGE ID       CREATED         SIZE
nginx                      latest    ad5708199ec7   7 days ago      192MB
hello-world                latest    1b44b5a3e06a   12 days ago     10.1kB
tomcat                     latest    3a258b4af57b   2 weeks ago     468MB
cleverest/crproxy          latest    c1a4187eb570   7 weeks ago     94.9MB
grafana/grafana            10.1.0    6fc2a772178b   24 months ago   392MB
prom/node-exporter         v1.6.1    458e026e6aa6   2 years ago     22.8MB
prom/prometheus            v2.45.0   e1fbd49323c6   2 years ago     236MB
gcr.io/cadvisor/cadvisor   v0.47.0   b2a3c8cd6153   2 years ago     87.3MB
ubuntu@10-7-127-87:~$ docker save -o nginx.tar nginx:latest
ubuntu@10-7-127-87:~$ docker save -o tomcat.tar tomcat:latest
ubuntu@10-7-127-87:~$ pwd
/home/ubuntu


然后再本地局域网操作

scp ubuntu@103.218.XXX.XXX:/home/ubuntu/nginx.tar /home/shitou/nginx.tar
The authenticity of host '103.218.XXX.XXX (103.218.XXX.XXX)' can't be established.
ED25519 key fingerprint is SHA256:dbj9PoKTdsvn1IoTC0ctCo2t6wAqQjhNlCiqVS+8Bio.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '103.218.XXX.XXX' (ED25519) to the list of known hosts.
ubuntu@103.218.XXX.XXX's password:
Permission denied, please try again.
ubuntu@103.218.XXX.XXX's password:
nginx.tar                                                              100%  187MB   3.3MB/s   00:56
shitou@aishitou:~$ scp ubuntu@103.218.XXX.XXX:/home/ubuntu/tomcat.tar /home/shitou/tomcat.tar
ubuntu@103.218.XXX.XXX's password:
tomcat.tar                                                             100%  452MB   2.6MB/s   02:51

shitou@aishitou:~$ docker load -i nginx.tar
Loaded image: nginx:latest
shitou@aishitou:~$ docker load -i tomcat.tar
cd9664b1462e: Loading layer  80.63MB/80.63MB
7ad9404c656d: Loading layer  64.65MB/64.65MB
74b13d8a4515: Loading layer  307.3MB/307.3MB
b975e904aaaf: Loading layer   2.56kB/2.56kB
886ae98b49c1: Loading layer  7.168kB/7.168kB
342586930e8a: Loading layer   2.56kB/2.56kB
5f70bf18a086: Loading layer  1.024kB/1.024kB
b3e39a1a1009: Loading layer  20.97MB/20.97MB
Loaded image: tomcat:latest

然后再局域网内启动镜像成为容器,查看版本号,

# 创建必要的本地目录用于持久化(修改为/opt/nginxy/)
mkdir -p /opt/nginxy/{conf,conf.d,html,logs}

# 拉取并启动Nginx容器
docker run -d \
  --name nginx-server \
  # 端口映射: 主机7867端口映射到容器80端口
  -p 7867:80 \
  # 持久化挂载(对应修改后的目录)
  -v /opt/nginxy/conf/nginx.conf:/etc/nginx/nginx.conf \
  -v /opt/nginxy/conf.d:/etc/nginx/conf.d \
  -v /opt/nginxy/html:/usr/share/nginx/html \
  -v /opt/nginxy/logs:/var/log/nginx \
  # 设置重启策略: 跟随系统启动自动重启
  --restart=always \
  # 资源限制: CPU最多使用1个核心,内存限制为512MB
  --cpus=1.0 \
  --memory=512m \
  nginx:latest