记一次docker buildx build 推送到本地私有仓库出现 connection refused 的问题
想在本地编译多个架构的基础镜像,这样后续有其他业务使用的时候,不必从头开始编译。
使用传统的 docker build -t ImageName:tag 方式,只能编译和主机相同架构的镜像。
而docker buildx build 不支持将编译好的镜像放置在本地docker中,只能以文件的形式放在本地。因此需要在本地搭建一个私有仓库,并将编译好的多架构的基础镜像推送到私有仓库进行存储。
搭建私有仓库比较简单,使用一条命令即可搭建完毕:
docker run -d -p 5000:5000 -v /data/docker_registry:/var/lib/registry --restart=always --name registry registry
私有仓库搭建好了,先写一个简单的镜像例子来测试下:
[root@yzc ~]# mkdir alpine && cd alpine
[root@yzc alpine]# cat Dockerfile
# syntax=docker/dockerfile:1
FROM alpine:3.16
RUN apk add curl
然而在buildx推送到本地确报了这个明明奇妙的问题:
[root@yzc alpine]# docker buildx build --platform linux/amd64,linux/arm64 -t localhost:5000/myalpine:latest -o type=registry --allow network.host .
=> [internal] booting buildkit
=> => pulling image moby/buildkit:buildx-stable-1
... 省略一堆无关紧要的日志...
=> [linux/arm64 2/2] RUN apk add curl
=> [linux/amd64 2/2] RUN apk add curl
=> ERROR exporting to image
=> => exporting layers
=> => pushing layers
------
> exporting to image:
------
ERROR: failed to solve: failed to push localhost:5000/myalpine:latest: failed to do request: Head "http://localhost:5000/v2/myalpine/blobs/sha256:56c7f5339f91bf07cf643df98dbc5386d3026f44072ca00913e1512a15649fb5": dial tcp 127.0.0.1:5000: connect: connection refused
看起来是docker buildx创建的实例的权限问题。
看了下文档,有人说要按照这个搞个配置文件https://github.com/moby/buildkit/blob/master/docs/buildkitd.toml.md, 于是按照这个搞了一个,没想到莫名其妙的问题太多了,于是删除了大量配置,只留了几条:
# cat ~/.config/buildkit/buildkitd.toml
debug = true
# root is where all buildkit state is stored.
root = "/var/lib/buildkit"
# insecure-entitlements allows insecure entitlements, disabled by default.
insecure-entitlements = [ "network.host", "security.insecure" ]
[log]
# log formatter: json or text
format = "text"
[dns]
nameservers=["1.1.1.1","8.8.8.8"]
options=["edns0"]
#searchDomains=["example.com"]
# optionally mirror configuration can be done by defining it as a registry.
[registry."localhost:5000"]
http = true
insecure = true
删掉现有docker buildx的实例,重新创建:
docker buildx rm default
docker buildx create --name muilt_buildx --platform 'linux/arm64,linux/amd64,linux/amd64/v2,linux/arm/v7,linux/arm/v6,linux/amd64/v3,linux/386' --config ~/.config/buildkit/buildkitd.toml --use
还是不行,一样的错误
看了下docker buildx create的说明,百度了下相关选项说明,然后删了现有实例重新创建就好了。
Options:
--append Append a node to builder instead of changing it
--bootstrap Boot builder after creation
--buildkitd-flags string Flags for buildkitd daemon
--config string BuildKit config file
--driver string Driver to use (available: "docker-container", "kubernetes", "remote")
--driver-opt stringArray Options for the driver
--leave Remove a node from builder instead of changing it
--name string Builder instance name
--node string Create/modify node with given name
--platform stringArray Fixed platforms for current node
--use Set the current builder instance
docker buildx rm muilt_buildx
docker buildx create --name muilt_buildx --platform 'linux/arm64,linux/amd64,linux/amd64/v2,linux/arm/v7,linux/arm/v6,linux/amd64/v3,linux/386' --driver-opt=network=host --use
再次执行上面的哪个buildx build命令即可,查看本地仓库列表:
curl 127.0.0.1:5000/v2/_catalog
{"repositories":["myalpine"]}
# 也能正常pull
# docker pull localhost:5000/myalpine:latest
latest: Pulling from myalpine
070eb51debd9: Pull complete
5761c5c4cc74: Pull complete
Digest: sha256:3b134a4faf8cb7e57efc549804e438270349ed7bfe4525edd42288d47d23e069
Status: Downloaded newer image for localhost:5000/myalpine:latest
localhost:5000/myalpine:latest
OK
记一次docker buildx build 推送到本地私有仓库出现 connection refused 的问题的更多相关文章
- docker推送镜像到私有仓库
配置私有仓库源 私有仓库地址:registry.supos.ai 修改/etc/docker/daemon.json文件,增加insecure-registries,如下所示: { "ins ...
- Docker CLI docker buildx build 常用命令
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化.Docker是内核 ...
- IOS之推送通知(本地推送和远程推送)
推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification) ...
- 如何将本地项目推送到码云仓库或者GitHub仓库
将本地项目推送到码云仓库. 前提: git 和码云 1.在码云上先创建一个仓库. 2.在要被上传的项目的目录右键, 选择 Git Bash Here. 3.在窗口输入命令: git init 这时 ...
- Git撤回已经推送(push)至远程仓库提交(commit)的版本
背景 所以,经常会遇到已经提交远程仓库,但是又不是我想要的版本,要撤下来. 回退版本一般使用git reset,又分为: # 不删除工作空间改动代码,撤销commit,不撤销git add . git ...
- 使用 git 将代码推送到多个仓库
使用 git 将代码推送到多个仓库 起因 起初,在 GitHub 建了一个仓库,200+ 的 commits .后来(终于在眼泪中明白...误
- 键盘侠Linux干货| 使用SSH方式推送文件至github仓库
前言 作为一名优秀的计算机从业人员,相信大家github应该都知道吧.(优秀的代码托管工具) 但是由于平常使用的https方式克隆的本地仓库,每次git push时都需要输入帐号密码才能将我们修改的文 ...
- 将本地项目推送到远程gitee仓库(通过git命令)
只有经历过地狱般的磨砺,才能练就创造天堂的力量: 只有流过血的手指,才能弹出世间的绝响 将本地的项目推送到远程gitee仓库 本地新建的Java项目,想推送到远程gitee仓库或者git仓库,你需要两 ...
- docker使用registry搭建本地私有仓库
参考链接来自:http://blog.csdn.net/wangtaoking1/article/details/44180901/ 和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时 ...
- Docker基础-搭建本地私有仓库
1.使用registry镜像创建私有仓库 安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境: docker run -d -p 5000:5000 regist ...
随机推荐
- 原根学习笔记+BSGS复习笔记
学原根发现拔山盖世算法忘光了,干脆一块儿写了吧. \(BSGS\) 算法 \(BSGS\) 算法,又名拔山盖世算法.北上广深算法.他解决的问题如下: 求解最小的可行的 \(k\),满足 \(a^k\e ...
- Android开发之定时任务(AlarmManager、WorkManager)
Android 程序的定时任务主要有AlarmManager.WorkManager两种. 一.AlarmManager AlarmManager,又称闹钟,可以设置一次性任务,周期重复任务,定时重复 ...
- autMan奥特曼机器人-实时翻译的用法
一.基本配置 访问并登录百度翻译开放平台:https://api.fanyi.baidu.com/ 进入开发者信息获取 APP ID和密钥,并开通"通用文本翻译"服务 autMan ...
- CentOS 8 上安装和配置 nginx
1.检查yum上的nginx版本 yum info nginx 2.安装nginx yum install nginx 安装过程有时会询问是否安装,输入y回车即可 3.将服务设置为每次开机启动 sud ...
- 一款基于.NET开源、强大的网络管理和网络问题排查工具!
前言 今天大姚给大家分享一款基于.NET开源.免费.功能强大的网络管理和网络问题排查工具:NETworkManager. 项目介绍 NETworkManager 是一个基于.NET开源(GPL-3.0 ...
- RSA算法详解及相关数学原理解析
RSA算法详解及相关数学原理解析 前言 为了记录自己学习密码学的过程,也是为了便于个人应付相关课程的考核,故写此博客. 本博客总结了怎么用C++手搓一个RSA算法,以及补补欠缺的一些数学知识和可能 ...
- 什么是 IPv6,为什么我们还未普及?
在大多数情况下,已经没有人一再对互联网地址耗尽的可怕境况发出警告,因为,从互联网协议版本 4(IPv4)的世界到 IPv6 的迁移,虽然缓慢,但已经坚定地开始了,并且相关软件已经到位,以防止许多人预测 ...
- ASP.NET Core 模型验证消息的本地化新姿势
最近在研究系统本地化的问题,不可避免要实现模型类的验证消息本地化.毕竟这些错误消息是要返回给用户的. 疑问产生 在MVC模型下,我们会使用模型类对请求参数进行绑定和验证.举个例子: public cl ...
- bug|SCSS相关问题
参考链接 [系统学习css]scss和sass以及 less的关系,node-sass.dart-sass和sass-loader是啥
- Zabbix Scheduled reports中文乱码
困扰了一天的问题,最后还是靠百度大神的方法解决.原文链接 https://blog.csdn.net/weixin_38587368/article/details/119357516 由于我的是容器 ...