docker中使用docker buildx build命令时拉取镜像timeout的问题

本文目的

解决在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容器名称作为打包源,待解决!!!

恭喜发财!!!

恭喜发财!!!

恭喜发财!!!

有问题联系我

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容