通过可以上外网的服务器先拉取镜像,然后手动导入到国内服务器

以halo为例,我之前遇到的情况,docker compose拉取镜像时只能拉取halo,不能拉取mysql的镜像,官方代码是这样的:

version: "3" #docker compose过新的话不需要这行

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.16
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo2:/root/.halo2
    ports:
      - "8090:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=o#DwN&JSa56
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/

  halodb:
    image: mysql:8.1.0
    restart: on-failure:3
    networks:
      halo_network:
    command: 
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
      - MYSQL_DATABASE=halo

networks:
  halo_network:

国内服务器拉取不到mysql的镜像,搜过很多都是让切换国内镜像源

vim /etc/docker/daemon.json

添加

{
  "registry-mirrors": ["http://hub-mirror.c.163.com","http://mirrors.ustc.edu.cn/"]
}

也可以添加阿里云的镜像,镜像加速器,它是根据本地节点生成的加速网址

然后重启服务

sudo systemctl daemon-reload
sudo systemctl restart docker

这种方法必须国内镜像源有你需要的镜像,一些小众的就没有,像halo在这几个国内镜像源就没有,没办法,只有用自己能上外网的机器先拉取后再传到国内机器加载。这里我能直接拉取halo的容器,mysql的会超时或者报错,所以我只需要操作mysql的就行。

外网服务器拉取传输操作流程

外网服务器:

docker pull mysql:8.1.0

保存镜像为tar文件:

docker save -o mysql-8.1.0.tar mysql:8.1.0

将 tar 文件传输到国内服务器:

#scp mysql-8.1.0.tar user@your_server:/path/to/save/ ##确定好登录服务器的用户和保存位置
scp mysql-8.1.0.tar root@43.142.120.25:/root/data/docker/halo

国内服务器上加载镜像:

docker load -i /root/data/docker/halo/mysql-8.1.0.tar
#或者你在/root/data/docker/halo目录下直接
#docker load -i mysql-8.1.0.tar

确保镜像已成功加载到服务器上:

docker images

您应该在输出中看到类似以下的内容:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               8.1.0               <IMAGE_ID>          <CREATED_DATE>      <SIZE>

docker-compose.yaml确认域名信息这些没问题直接拉取就行了

docker-compose up -d

正常来说就没问题了。