本文目的
解决在mac m4+docker 环境下无法使用docker buildx 打包,打包时出现了拉取镜像包timeout的问题。
前提条件
运行环境
mac m4
docker 最新版本
运行命令
--output type=oci,dest=music-base.tar 为了把镜像包导出,没有这行的话,就算打完包以后也无法在docker images中查看到,我看gpt或者deepseek等都要求使用--push或者--load,首先完不想推送,其次--load并不好使,所以使用了这种方式
docker buildx build --platform linux/amd64,linux/arm64/v8 --output type=oci,dest=music-base.tar -t music/base:1.0.8 -f Dockerfile.base .
问题描述
在Dockerfile.base
文件中我使用了FROM node:20-alpine AS builder
导致在下载node:20-alpine
的时候出现了timeout的问题。
解决问题思路
1. (和解决问题无太大关系)检查registry镜像是否正常
docker pull nginx:latest
如果这里能拉取下来镜像表示镜像源没有问题,如果拉取不下来可以在docker deskboard
中设置里面修改Docker Engine
里面的内容,主要包含代码如下
{
"experimental": true,
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"http://mirrors.ustc.edu.cn/",
"http://mirror.azure.cn/",
"https://docker.hpcloud.cloud",
"https://docker.m.daocloud.io"
]
}
配置完成以后Apply restart
,再拉取nginx镜像应该就没有问题了。
如果没有客户端建议查找/etc/docker/daemon.json
文件是否有以上配置,在mac中应该是~/.docker/daemon.json
文件。
2.(最终解决)buildkit
的问题
在运行docker buildx build
的时候,docker
会自动帮您创建一个buildx_buildkit_charming_jemison0
容器,您可以检查一下容器里面是否有这个容器
docker ps -a
如果没有这个容器,可以考虑先执行一下docker buildx build ...
命令,我这里没有写全,自行补齐。
已经有这个容器的,进入到容器中,创建目录并且需要创建一个新的文件buildkitd.toml
# buildkitd.toml 文件内容
[registry."docker.io"]
mirrors = ["https://docker.1panel.live","http://mirrors.ustc.edu.cn/","http://mirror.azure.cn/","https://docker.hpcloud.cloud","https://docker.m.daocloud.io"]
在宿主机中创建一个buildkitd.toml
文件,我创建到了~/Desktop/
目录了,执行命令的时候也需要在这个目录执行
docker exec -it buildx_buildkit_charming_jemison0 sh
cd /etc
mkdir buildkit
exit
在宿主机的~/Desktop/
目录哈,执行以下命令
# 将新文件拷贝到固定目录下
docker cp buildkitd.toml buildx_buildkit_charming_jemison0:/etc/buildkit/
# 重启容器
docker restart buildx_buildkit_charming_jemison0
至此已经结束了,您可以再次使用docker buildx build
进行打包了。
然后最后执行
docker buildx build --platform linux/amd64,linux/arm64/v8 --output type=oci,dest=music-base.tar -t music/base:1.0.10 -f Dockerfile.base .
# 打完的包会在你的本地产生一个.tar文件,再次执行load即可
docker import music-base.tar music/base:1.0.10
# 注意load -i 加载不成功,会报错,暂时还没有找到报错原因,不过使用docker import可以加载成功
遗留问题,是否可以把默认的buildx_buildkit_charming_jemison0
替换为自启容器,例如为想启动一个buildkit容器名称作为打包源,待解决!!!
恭喜发财!!!
恭喜发财!!!
恭喜发财!!!
有问题联系我