【问题标题】:How to make docker pull behave correctly如何使 docker pull 行为正确
【发布时间】:2021-09-27 06:59:56
【问题描述】:

我想构建 freebsd docker 镜像,因为基准测试表明它具有更低延迟、更好组织的网络堆栈,我想在我的应用程序中使用它。所以我有以下 docker 文件

考虑 Dockerfile:

FROM alpine:latest
RUN echo $(uname -a)
CMD [echo]

sudo docker build . 打印内核版本

如果我将 Dockerfile 更改为另一个

FROM lexaguskov/freebsd:latest
RUN echo $(uname -a)
CMD [echo]

它不工作,打印一个错误:

Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM lexaguskov/freebsd:latest
latest: Pulling from lexaguskov/freebsd
Image docker.io/lexaguskov/freebsd:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
9503d02123d7: Pull complete 
operating system is not supported

所以docker pull 命令行为不端,如何解决? 如果 linux 不支持运行基于 freebsd 的图像,至少它必须允许我使用 docker image inspect 反转,但我什至无法检查。码头工人拉有什么问题?我认为它行为不端

【问题讨论】:

  • 您应该已经提取了图像。海事组织。你能做一个 docker image ls 并检查吗?它只告诉您使用过时清单的图像并且您的操作系统不支持使用该图像。由于 docker 容器与主机共享内核。
  • 图片是6岁。即使你可以让它运行,给它打安全补丁也将是一场噩梦。
  • 网络堆栈通常是在 OS 内核中实现的,但 Docker 容器总是共享主机的内核。您可以想象在容器中运行 BSD 用户空间,但它仍然具有底层 Linux 内核 和网络堆栈。您可能需要一个虚拟机来进行此设置。
  • @TheFool 没有它没有被拉, ls 只显示我高山和我的测试图像。因为拉命令失败并出现错误。我认为拉命令旨在拉图像,而不是分析它,所以我认为它行为不端,没有做它应该做的事情。如果我想交叉编译怎么办?
  • @HansKilian 我猜你的通知超出了范围。我对安全性或补丁不感兴趣。我想比较基于 linux 的 docker 和基于 freebsd 的性能,什么是延迟、抖动,以及小型软件定义的回显数据包 (pps) 的吞吐量是多少

标签: docker


【解决方案1】:

容器不提供内核,它们只是在主机内核下运行具有一些隔离设置的进程。如果你想运行一个内核,你应该运行一个虚拟机而不是一个容器。

您尝试运行的特定映像建于 2015 年,使用已弃用的架构,并将操作系统/架构设置为 freebsd/amd64 而不是 linux/amd64。假设您的 docker 引擎在 Linux 上(您可以使用 docker info 进行验证),它将正确拒绝运行此映像。问题不在于 docker 无法拉取图像,它确实被拉入了构建器。而是该映像可能包含无法在您的内核上运行的二进制文件,就像尝试在 Linux 主机上运行 Windows exe 一样,因此 docker 拒绝使用它。

似乎有一个port of Docker to Freebsd,但这个doesn't appear to be working 已经好几年了。您可能能够运行较旧的 docker 安装,但预计会出现问题、安全漏洞,并且不会与 Linux 上的 docker 进行类似的比较。为此,您首先需要安装 Freebsd(例如在 VM 上),这可能会破坏在您的情况下运行 docker 容器的目的。

【讨论】:

  • 问题来自我的误解,即 docker 不是 vm,而是现有内核之上的轻量级包装器。我也猜想docker已被弃用,现在一切都在使用crio或类似的东西。感谢您对这些事情的解释。为了获得更低延迟的网络堆栈,我猜应该将 freebsd 安装在硬件上,而对时间敏感的软件应该使用它的内核
猜你喜欢
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 2019-05-29
  • 2021-10-23
  • 2021-04-29
  • 2016-07-16
  • 2021-06-13
  • 2017-08-13
相关资源
最近更新 更多