我想使用 gitlab-ci 中的 buildah 来构建图像,从中运行容器并对其进行一些测试。
我当前的 gitlab-ci 是:
tests:
tags:
- docker
image: quay.io/buildah/stable
stage: test
variables:
STORAGE_DRIVER: "vfs"
BUILDAH_FORMAT: "docker"
BUILDAH_ISOLATION: "rootless"
only:
refs:
- merge_requests
changes:
- **/*
script:
- buildah info --debug
- buildah unshare docker/test/run.sh
Run Code Online (Sandbox Code Playgroud)
我的运行器是私有的 gitlab 运行器,我不想更改其配置(以免破坏其他 CI)。
run.sh的内容是:
#!/usr/bin/env bash
set -euo pipefail
container=$(buildah --ulimit nofile=8192 --name my-container from phusion/baseimage:bionic-1.0.0-amd64)
Run Code Online (Sandbox Code Playgroud)
错误是:
level=warning msg="error reading allowed ID mappings: error reading subuid mappings for user \"root\" and subgid mappings for group \"root\": No subuid ranges found …Run Code Online (Sandbox Code Playgroud) 我计划从 Docker 迁移到 Podman。我经常使用 docker-compose,所以我也计划切换到 podman-compose。
然而,我陷入了最简单的 podman 示例,我似乎无法将卷安装到我的容器上?显然我做错了什么,但我不知道它是什么。
我的源文件肯定存在于我的(硬件)主机上(所以不是 podman 机器)。但我不断收到错误“没有这样的文件或目录”。
有趣的是,如果我在 podman 机器本地手动创建相同的文件(podman 机器 ssh --> touch /tmp/test.txt),它工作得很好。
问题是;
podman run应该可以工作,我还做错了什么吗?$ ls -al /tmp/test.txt
-rw-r--r-- 1 <username> <group> 10 Dec 8 13:33 /tmp/test.txt
$ podman run -it -v /tmp/test.txt:/tmp/test.txt docker.io/library/busybox
Error: statfs /tmp/test.txt: no such file or directory
$ podman run -it -v /tmp/test.txt:/tmp/test.txt:Z docker.io/library/busybox
Error: statfs /tmp/test.txt: no such file or directory
Run Code Online (Sandbox Code Playgroud)
附加信息:
$ podman info --debug
host: …Run Code Online (Sandbox Code Playgroud) 我创建了一个交叉编译容器映像,其中包含针对不同目标平台(裸机 Arm 核心、MINGW/Windows、armhf/Raspberry Pi)的构建环境。
以下所有内容均在 Intel NUC 8i7BEH 上的 Manjaro Linux 下完成。我以普通用户身份登录。
构建镜像已经揭示了 docker 和 podman 之间巨大的性能差异。在我性能相当低的机器上,我发现 docker 构建的运行速度比使用 podman 完成相同任务快了 6 倍以上。
docker build - 4 min 36 sec
podman build > 25 minutes
Run Code Online (Sandbox Code Playgroud)
为单个目标构建我的应用程序然后平均使用:
podman - 73 sec
docker - 4.9sec
Run Code Online (Sandbox Code Playgroud)
在同一台机器上进行本机构建平均需要 3 秒。
启动容器镜像以按顺序构建适用于 3 个不同平台的应用程序需要(平均):
podman - 85 sec
docker - 13 sec
Run Code Online (Sandbox Code Playgroud)
如何解释容器性能的巨大差异?我可以做些什么来提高 podman 的性能,以便它至少进入与 docker 相同的区域吗?我宁愿使用 podman 而不是 docker。我更喜欢 podman 提供的无服务设置以及无根容器。
谢谢斯特凡
我在 podman 上启动机器时遇到问题 我正在使用 ubuntu 20.04 服务器 我像这样安装了 podman
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/Release.key" | sudo apt-key add -
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install podman
Run Code Online (Sandbox Code Playgroud)
podman 版本是
podman version
Version: 3.4.2
API Version: 3.4.2
Go Version: go1.16.6
Built: Thu Jan 1 00:00:00 1970
OS/Arch: linux/amd64
Run Code Online (Sandbox Code Playgroud)
我需要启动 podman 机器,但出现错误
我正在这样创作
root@ubuntu:# podman machine init
Extracting compressed file
root@ubuntu:# podman machine list
NAME VM TYPE CREATED LAST UP CPUS MEMORY …Run Code Online (Sandbox Code Playgroud) 更新:我设法通过使用此命令启用 wsl2 来解决此问题
wsl --设置默认版本 2
运行 podman-v4.1.0.msi 并在 power shell 中运行 podman machine init 命令后,我得到以下信息:
Copr repo for podman4 owned by rhcontainerbot 12 kB/s | 1.0 kB 00:00
Importing GPG key 0x2F6C3CBA:
Userid : "rhcontainerbot_podman4 (None) <rhcontainerbot#podman4@copr.fedorahosted.org>"
Fingerprint: 79B5 022D 580F B1D6 B527 CB83 3BB2 485A 2F6C 3CBA
From : https://download.copr.fedorainfracloud.org/results/rhcontainerbot/podman4/pubkey.gpg
Key imported successfully
error: sqlite failure: CREATE TABLE IF NOT EXISTS 'Packages' (hnum INTEGER PRIMARY KEY AUTOINCREMENT,blob BLOB NOT NULL): locking protocol
error: cannot open Packages index using …Run Code Online (Sandbox Code Playgroud) 启动镜像 alpine 和 ubuntu 时,podman 可以工作(RHEL 8)。如果启动图像 ubi8 和 grafana/grafana-oss,则会失败并显示
Error: writing blob: adding layer with blob "sha256:de63ba066b7c0c23e2434efebcda7800d50d60f33803af9c500f75a69fb76ffa": Error processing tar file(exit status 1): operation not supported
Run Code Online (Sandbox Code Playgroud)
为什么有些图像失败而其他图像却失败?这是无根完成的,但网络文件系统并未发挥作用。完整输出:
$ whoami
foo
$ echo $HOME
/home/foo
$ df -h /home
Filesystem Size Used Avail Use% Mounted on
rootfs 7.9G 6.8G 1.2G 86% /
$ podman run -it ubi8
Resolved "ubi8" as an alias (/etc/containers/registries.conf.d/001-rhel-shortnames.conf)
Trying to pull registry.access.redhat.com/ubi8:latest...
Getting image source signatures
Checking if image destination supports signatures
Copying blob 1b890c73c3cf …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的一个开发盒从 centos 8 迁移到 RHEL9。我严重依赖 docker,并注意到当我尝试在 RHEL 机器上运行 docker 命令时,它安装了 podman-docker。事情似乎进展得很顺利。我能够使用我已经知道的 docker 命令毫无问题地提取图像、启动、构建、提交新版本。
我遇到的问题是我似乎无法通过 docker 套接字(这似乎是 podman 的链接)与其交互。
如果我运行 docker 命令:
[@rhel9 ~]$ docker images
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/redhat/ubi9 dev_image de371523ca26 6 hours ago 805 MB
docker.io/redhat/ubi9 latest 9ad46cd10362 6 days ago 230 MB
Run Code Online (Sandbox Code Playgroud)
它按预期列出了我的图像。我应该也可以运行:
[@rhel9 ~]$ curl --unix-socket /var/run/docker.sock -H 'Content-Type: application/json' http://localhost/images/json | jq .
% Total % Received % Xferd Average Speed Time Time …Run Code Online (Sandbox Code Playgroud) 我一直在使用docker 构建--ssh标志来让构建从 ssh-agent 访问我的密钥。
当我用 podman 尝试同样的事情时,它不起作用。我正在 macOS Monterey 12.0.1 上工作。英特尔芯片。我还在 Ubuntu 和 WSL2 上重现了这个。
\n\xe2\x9d\xaf podman --version\npodman version 3.4.4\nRun Code Online (Sandbox Code Playgroud)\n这是一个 Dockerfile 示例:
\nFROM python:3.10\n\nRUN mkdir -p -m 0600 ~/.ssh \\\n && ssh-keyscan github.com >> ~/.ssh/known_hosts\n\nRUN --mount=type=ssh git clone git@github.com:ruarfff/a-private-repo-of-mine.git\n\nRun Code Online (Sandbox Code Playgroud)\n当我运行DOCKER_BUILDKIT=1 docker build --ssh default .它时,它可以工作,即构建成功,存储库被克隆,并且 ssh 密钥没有烘焙到图像中。
当我运行podman build --ssh default .构建失败时:
git@github.com: Permission denied (publickey).\nfatal: Could not read from remote repository.\n\nPlease make sure you …Run Code Online (Sandbox Code Playgroud) 我尝试使用 podman 桌面来替换 docker 桌面。当我安装这个podman桌面并打开它时,它始终处于初始化状态。我不知道这是怎么回事。有人遇到过同样的问题吗?

我想安装并使用 podman 桌面并找出它有什么问题。
在 mac m2 max 上,我使用安装了 podman brew intsall podman,然后运行podman machine init --disk-size 150,然后运行podman start。它卡在“正在等待虚拟机...”上。我从 qemu 看到此错误:同步异常位于 0x00000000BC562000