想在本地编译多个架构的基础镜像,这样后续有其他业务使用的时候,不必从头开始编译。

使用传统的 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 的问题的更多相关文章

  1. docker推送镜像到私有仓库

    配置私有仓库源 私有仓库地址:registry.supos.ai 修改/etc/docker/daemon.json文件,增加insecure-registries,如下所示: { "ins ...

  2. Docker CLI docker buildx build 常用命令

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化.Docker是内核 ...

  3. IOS之推送通知(本地推送和远程推送)

    推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification) ...

  4. 如何将本地项目推送到码云仓库或者GitHub仓库

    将本地项目推送到码云仓库. 前提: git 和码云   1.在码云上先创建一个仓库. 2.在要被上传的项目的目录右键, 选择 Git Bash Here. 3.在窗口输入命令: git init 这时 ...

  5. Git撤回已经推送(push)至远程仓库提交(commit)的版本

    背景 所以,经常会遇到已经提交远程仓库,但是又不是我想要的版本,要撤下来. 回退版本一般使用git reset,又分为: # 不删除工作空间改动代码,撤销commit,不撤销git add . git ...

  6. 使用 git 将代码推送到多个仓库

    使用 git 将代码推送到多个仓库 起因     起初,在 GitHub 建了一个仓库,200+ 的 commits .后来(终于在眼泪中明白...误

  7. 键盘侠Linux干货| 使用SSH方式推送文件至github仓库

    前言 作为一名优秀的计算机从业人员,相信大家github应该都知道吧.(优秀的代码托管工具) 但是由于平常使用的https方式克隆的本地仓库,每次git push时都需要输入帐号密码才能将我们修改的文 ...

  8. 将本地项目推送到远程gitee仓库(通过git命令)

    只有经历过地狱般的磨砺,才能练就创造天堂的力量: 只有流过血的手指,才能弹出世间的绝响 将本地的项目推送到远程gitee仓库 本地新建的Java项目,想推送到远程gitee仓库或者git仓库,你需要两 ...

  9. docker使用registry搭建本地私有仓库

    参考链接来自:http://blog.csdn.net/wangtaoking1/article/details/44180901/ 和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时 ...

  10. Docker基础-搭建本地私有仓库

    1.使用registry镜像创建私有仓库 安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境: docker run -d -p 5000:5000 regist ...

随机推荐

  1. Typecho博客网站底部添加网站已运行时间教程

    样式一: 1. 将代码放入 functions.php 一般在主题根目录:网站 /usr/themes/ 主题 修改一下你自己的网站时间 // 设置时区 date_default_timezone_s ...

  2. Zookeeper、Hadoop、Hbase的启动顺序以及关闭顺序

    启动顺序 Hadoop及hbase集群启动顺序 zookeepeer -> hadoop -> hbase 停止顺序 Hadoop及hbase集群关闭顺序 hbase -> hado ...

  3. CF889E题解

    \(\text{Problem - 889E - Codeforces}\) \(\text{*3000}\) 修正 感谢学长 \(\text{fs}\) 指出状态数原因解释的错误. 题意 给一个序列 ...

  4. 机器学习 | 强化学习(2) | 动态规划求解(Planning by Dynamic Programming)

    动态规划求解(Planning by Dynamic Programming) 动态规划概论 动态(Dynamic):序列性又或是时序性的问题部分 规划(Programming):最优化一个程序(Pr ...

  5. Python基础-模块和面向对象-shutil、re、bs4、requests模块

    概要: 模块 自定义模块(已经讲了) 内置模块 shutil re 正则表达式 第三方模块 requests 模块 bs4 模块 面向对象: 面向对象(Object-Oriented Programm ...

  6. 基于近红外与可见光双目摄像头的人脸识别与活体检测,文末附Demo

    基于近红外与可见光双目摄像头的活体人脸检测原理 人脸活体检测(Face Anti-Spoofing)是人脸识别系统中的重要一环,它负责验证捕捉到的人脸是否为真实活体,以抵御各种伪造攻击,如彩色纸张打印 ...

  7. go goroutine 怎样更好的进行错误处理

    前言 在 Go 语言程序开发中,goroutine 的使用是比较频繁的,因此在日常编码的时候 goroutine 里的错误处理,怎么做会比较好呢? 一般我们的业务代码如下: func main() { ...

  8. Go语言fmt.Sprintf、fmt.Printf(格式化输出)

    fmt.Printf fmt.Printf在程序中使用%f来格式化所需的值 看起来我们的值被四舍五入到了一个合理的数.但小数点后仍显示了6位,这对我们当前的需要来说实在是太多了. 对于这种情况,格式化 ...

  9. jquery submit 解决多次提交

    jquery submit 解决多次提交 web应用中常见的问题就是多次提交,由于表单提交的延迟,有时几秒或者更长,让用户有机会多次点击提交按钮,从而导致服务器端代码的种种麻烦. 为了解决这个问题,我 ...

  10. pandas -- 处理非数值型数据 -- 数据分析三剑客(核心)

    博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jup ...