通过可以上外网的服务器先拉取镜像,然后手动导入到国内服务器
以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正常来说就没问题了。