gvx: Linux Containers, Docker ve Kubernetes'i Tek Bir Unprivileged Process İçinde Çalıştırma

Giriş: Root veya Ana Makine Daemon'ı Gerektirmeden Güvenlik Sertleştirilmiş Konteynerler
Bir geliştirme makinesinde, CI runner'ında veya çok kiracılı bir bulut düğümünde Linux konteynerlerini, docker build komutunu veya Kubernetes'i çalıştırmak genellikle rahatsız edici bir güvenlik ödünleşimine zorlar:
- Linux üzerinde standart OCI çalışma zamanları (
runc,crun,runsc),rootayrıcalıkları, ana makinedeki/var/run/docker.sockdosyasının açığa çıkarılması,--privileged(CAP_SYS_ADMIN) veya ana makine çekirdeğinin saldırı yüzeyini genişleten kullanıcı ad alanları (unshare(CLONE_NEWUSER)) gerektirir. - Windows ve macOS üzerinde konteyner motorları (
Docker Desktop,Podman Machine,Lima,OrbStack), WSL2, Hyper-V veyaVirtualization.frameworkiçinde tam bir Linux sanal makine çekirdeği başlatır ve bu sanal makine içinde kalıcı bir arka plan daemon'ı çalıştırır.
gvx (rungv CLI ve z.gfire.dev/gvx/pkg/gvx Go SDK), güvenli, sıfır ayrıcalıklı bir alternatif sunar. Google'ın gVisor kullanıcı alanı Linux çekirdeğinin (Sentry) ve kullanıcı alanı ağ yığınının (netstack) upstream ile izlenebilir bir çatalı olarak geliştirilen gvx, Windows, macOS ve Linux üzerinde değiştirilmemiş linux/amd64 ve linux/arm64 ELF64 ikililerini ve OCI konteynerlerini tek bir ayrıcalıksız, kendini kilitleyen ana makine süreci içinde doğrudan çalıştırır.
Güvenlik Garantisi (Üç Halkalı Derinlemesine Savunma):
gvxana makine işletim sistemi güvenlik sınırlarını asla zayıflatmaz, çekirdek sürücüleri asla yüklemez ve ana makinede aslaroot,sudo,--privilegedveyaCLONE_NEWUSERgerektirmez. Tek bir konuk talimatını yürütmeden öncegvx, kendi ana makine sürecini Windows Restricted Tokens ve Job Objects, macOS Seatbelt (deny default) veya LinuxPR_SET_NO_NEW_PRIVSile BPFseccompkullanarak kilitler. Tüm konuk sistem çağrıları, sanalUID 0ayrıcalıkları, bağlantılar (VFS2) ve ağ tabloları (netstack), bellek güvenli GoSentryçekirdeği içinde sıkı biçimde sınırlandırılır.
| Çalışma Zamanı | Ana Makine İşletim Sistemi | Soğuk Başlatma | Bellek Ayak İzi | Yönetici veya sudo Gerekli mi | Arka Plan VM Daemon'ı | Doğrudan OCI İmaj Çalıştırma |
|---|---|---|---|---|---|---|
gvx (whpx / hvf) | Windows (amd64, arm64) ve macOS (arm64) | ~20 ms | ~30 MiB | Hayır | Hayır | Evet |
gvx (systrap) | Windows (amd64, arm64) ve Linux (amd64, arm64) | ~25 ila 65 ms | ~31 MiB | Hayır | Hayır | Evet |
| WSL2 / Docker Desktop | Windows ve macOS | 800 ila 2500 ms | > 512 MiB | Evet (İlk Kurulum) | Evet | Daemon Gerektirir |
| QEMU (Tam Sistem) | Windows ve macOS | 1500 ila 4000 ms | > 256 MiB | Hayır | Hayır | Disk İmajı Gerektirir |
Windows veya macOS üzerinde hiçbir Linux VM çekirdeği başlatılmaz. Ana makinede hiçbir arka plan daemon'ı çalışmaz. Ana makine işletim sistemi üzerinde root, sudo, kullanıcı ad alanları (CLONE_NEWUSER), mount(2), TUN/TAP sürücüleri veya CAP_NET_ADMIN ayrıcalıkları gerekmez. Bu ayrıcalıksız süreç içinde gvx, Docker-in-Docker (docker:dind), docker build, docker compose ve çok düğümlü Yüksek Erişilebilirlikli Kubernetes (k3s ile gömülü etcd ve Calico CNI) çalıştırır.
Konteyner Yaşam Döngüsü ve Üç Halkalı Ana Makine Kilitlemesi
Her gvx sandbox'ı tek bir ayrıcalıksız ana makine süreci içinde çalışır ve üç aşamalı bir yaşam döngüsü uygular: gerekli tüm ana makine dosya tanımlayıcılarını ve soketlerini önceden açmak, pkg/hostlockdown aracılığıyla ana makine işletim sistemi sürecini kilitlemek ve süreç içi Sentry yürütme döngüsüne girmek.

Kontrolü ilk konuk talimatına devretmeden önce gvx, önbelleğe alınmış .erofs imaj katmanı tanımlayıcılarını, .ext4 birim dosya tanımlayıcılarını, /workspace *os.Root tutamacını ve ana makine ağ soketlerini önceden açar, ardından hostlockdown.Apply() fonksiyonunu çağırır:
- Windows NT (
lockdown_windows.go): Ayrıcalıkları yerinde kaldırmak içinSE_PRIVILEGE_REMOVEDileAdjustTokenPrivilegesçağırır, Low bütünlük seviyesinde (S-1-16-4096) birDISABLE_MAX_PRIVILEGEkısıtlı taklit (impersonation) belirteci bağlar, süreciJOB_OBJECT_LIMIT_ACTIVE_PROCESS = 1ile anonim bir Job Object'e atar (herhangi bir alt süreç oluşturulmasını engeller) veSetProcessMitigationPolicyileDisallowWin32kSystemCalls = 1değerini etkinleştirir. - macOS XNU (
lockdown_darwin.go):RLIMIT_NPROC = 0değerini ayarlar ve(version 1)(deny default)ile başlayan,process-fork,process-exec*ve yeni tüm ana makine dosya açmalarını engelleyen bir Seatbelt profili (sandbox_init_with_parameters) uygular. - Linux (
lockdown_linux.go+pkg/gvx/syscallfilter_linux.go):PR_SET_NO_NEW_PRIVSdeğerini ayarlar veexecve,execveat,clone,openatvesocketiçin açıkEPERMkuralları içeren Sentry BPFseccompizin listesini tüm iş parçacıklarında (SECCOMP_FILTER_FLAG_TSYNC) kurar.
Platformlar Arası Sistem Çağrısı Yakalama ve 4 KB Sayfalama (pkg/sentry/platform)
Linux ELF64 ikilileri, mmap(MAP_FIXED) segment eşlemeleri için 4 KB (0x1000) bellek sayfa ayrıntı düzeyi varsayar. Ancak Windows VirtualAlloc ve MapViewOfFile3 64 KB (0x10000) hizalaması uygular, Apple Silicon macOS (darwin/arm64) ise 16 KB (0x4000) ana makine sayfaları kullanır. Ayrıca her işletim sistemi, bir Linux VM başlatmadan Linux SYSCALL (amd64) ve SVC #0 (arm64) komutlarını yakalamak için farklı bir mekanizma gerektirir.
gvx, pkg/sentry/platform.Context arayüzünü uygulayan dört yürütme arka ucunda bu iki sorunu çözer:

1. Windows Donanım Motoru: platform/whpx (WinHvPlatform.dll)
windows/amd64 ve windows/arm64 üzerinde platform/whpx, bir konuk işletim sistemi çekirdeği başlatmadan WHvCreatePartition aracılığıyla hafif bir hipervizör bölümü oluşturur:
- 64 KB'den 4 KB'ye Sayfalama Ayrıştırıcısı:
whpx,pgalloc.MemoryFileiçindeki her 64 MiB arenayıWHvMapGpaRangearacılığıyla bölüme bir kez kaydeder. SonrakiMapFileveUnmapçağrıları yalnızca bölüm içindeki konuk sayfa tablolarını değiştirir ve Windows'un 64 KB tahsis ayrıntı düzeyine rağmen tam 4 KBR/W/Xizinlerini uygular. CommPageÜzerinden Sıfır API Kayıt Değişimi:amd64üzerinde, konuk Ring-3SYSCALLkomutu, bölüm içindeki bir Ring-0MSR_LSTARkesim noktasına (stubgen_x86.go) girer; bu kesim noktası hızlı yol sistem çağrısı GPR'lerini (RAX, RDI, RSI, RDX, R10, R8, R9, RIP, RSP) paylaşılan 4 KBCommPagealanına yazar veWHvRunVirtualProcessorişleminden çıkmak içinHLTkomutunu yürütür.arm64üzerinde, konuk EL0SVC #0komutu EL1 vektörlerine (stubgen_a64.go) girer,X0..X8, SP_EL0, ELR_EL1, PSTATEdeğerleriniCommPagealanına yazar ve Sentry'ye bellek çıkışını tetiklemek için sıfır GPA'daki arka planı olmayan adresten yükleme yapar.
2. macOS Donanım Motoru: platform/hvf (Hypervisor.framework)
Apple Silicon (darwin/arm64) üzerinde platform/hvf, konteyner iş parçacıklarını Hypervisor.framework vCPU'ları (hv_vm_create, hv_vcpu_run) içinde çalıştırır:
- Çift Aşamalı 16 KB Üzerinde 4 KB MMU Çevirisi: Aşama 2 (
hv_vm_map), 1 GiB bellek dosyası parçalarını Ara Fiziksel Adres (IPA) alanına bir kez, 16 KB ana makine sayfa ayrıntı düzeyindeHV_MEMORY_READ | HV_MEMORY_WRITE | HV_MEMORY_EXECizinleriyle eşler. vCPU içinde EL1bluepillkesim noktası (bluepill_arm64.go),TTBR0_EL1içindeTCR_EL1.TG0 = 0b00(4 KB granül) değerini yapılandırır ve tamR-XveyaRW-(UXN=1) izinlerine sahip 4 KB Aşama 1 sayfa tablosu girişlerini doldurur. ARM64 MMU, Aşama 1 ve Aşama 2 izinlerinin kesişimini uyguladığından, donanım izin hatalarını tam 4 KB sınırlarında yakalar. - Sistem Çağrısı Tuzağı: Konuk EL0
SVC #0komutu EL1VBAR_EL1değerine tuzaklanır, kayıtları paylaşılan 4 KBCommPagealanına yazar ve Go Sentry iş parçacığına dönmek içinhv_vcpu_runiçindenHVC #0komutunu yürütür.
3. Windows Kullanıcı Modu Yedeği: platform/systrap (winsystrap)
Donanım sanallaştırması kullanılamadığında (iç içe bulut VM'lerinde olduğu gibi), winsystrap windows/amd64 ve windows/arm64 üzerinde konuk kodunu kullanıcı modunda çalıştırır:
- Donanım
CR3/TTBR0_EL1İzolasyonu: Konuk iş parçacıkları, Low bütünlük belirteci ve bir Job Object ile sınırlandırılmış, oluşturulmuş 1 KB çalıştırılabilir dosyadan (stubimage_xplat.go) başlatılan izole kesim alt süreçleri içinde çalışır. - Yerinde İkili Yama ve
winSysmsgIPC:amd64üzerinde yama uygulayıcı (patcher_amd64_xplat.go), 2 baytlıksyscall(0f 05) komutlarını 5 baytlıkjmp rel32atlamalarıyla (5 baytlık pencere kullanılamadığındaCC 90kesme noktası tuzakları ile) hızlı yol adasına değiştirir.arm64üzerindesvc #0, bir ada yuvasınaBdallanmasıyla yamalanır. Ada, kayıtları paylaşılanwinSysmsgsayfasına yazar veWaitOnAddressileWakeByAddressSinglearacılığıyla Sentry ile senkronize olur; yamalanmamış tuzaklar ve sayfa hataları ise bir Windows Debug Object (WaitForDebugEventEx) üzerinde durdurulur.
4. Linux Kullanıcı Modu Motoru: platform/systrap
linux/amd64 ve linux/arm64 üzerinde systrap, konuk iş parçacıklarını (sysmsg) çalıştırır; bu iş parçacıkları konuk sistem çağrılarını SECCOMP_RET_TRAP (SIGSYS) ile yakalar ve syscall noktalarını SYS_FUTEX ile senkronize edilen paylaşılan bellekli bir sıçrama alanına (sysmsg) ikili yama ile yönlendirir. Bu sırada bir kesim syscallThread (syscall_thread.go) iş parçacığı, adres alanı işlemlerini (mmap, munmap, clone) SECCOMP_RET_USER_NOTIF (_RUN_SECCOMP_LOOP) aracılığıyla yürütür. gvx, tek SECCOMP_FILTER_FLAG_NEW_LISTENER yuvasının EBUSY döndürdüğü dış bir gVisor (runsc) sandbox'ı içinde çalıştığında, syscallThread iş parçacığını otomatik olarak paylaşılan bellekli futex döngüsüne (_RUN_SYSCALL_LOOP) geçirir; ayrıntılar bu serinin 3. bölümünde anlatılmaktadır.
gvx'in Konuk Linux Sistem Çağrılarını Sanal Alt Sistemlere ve Ana Makine Tutamaçlarına Eşlemesi
Bir platform motoru konuk SYSCALL (amd64) veya SVC #0 (arm64) komutunu yakaladıktan ve konuk kayıtlarını 4 KB paylaşılan sayfaya (CommPage, sysmsg veya winSysmsg) yazdıktan sonra kontrol, Go Sentry görev goroutine'ine (pkg/sentry/kernel/task_syscall.go) döner. Linux sistem çağrılarını altta yatan ana makine işletim sistemi çekirdeğine iletmek yerine Task.doSyscall(), özgün kayıt durumunu (SyscallSaveOrig()) kaydeder, konuk içi BPF seccomp filtrelerini ve ptrace duraklamalarını değerlendirir ve sistem çağrısı numarasını linux.AMD64 veya linux.ARM64 aracılığıyla (pkg/sentry/syscalls/linux/linux64.go, yaklaşık 370 Linux sistem çağrısını kapsar) dört iç alana yönlendirir:

| Sistem Çağrısı Alanı | Temsili Konuk Linux Sistem Çağrıları | Dahili gvx Alt Sistemi (pkg/sentry) | Ana Makine İşletim Sistemi Sınırı Etkileşimi (hostlockdown Sonrası) |
|---|---|---|---|
| A. Süreç, Ad Alanı, Bağlama ve Senkronizasyon | clone, execve, unshare, setns, mount, umount2, pivot_root, setuid, capset, futex, epoll_wait, pipe2 | kernel.Task, sanal kimlik bilgileri, futex tablosu ve bellek içi VFS2 (procfs, sysfs, cgroupfs v2, tmpfs, overlayfs) | Sıfır ana makine sistem çağrısı (%100 bellek içi Go durumu; ana makine işletim sistemi tarafından tamamen görünmez) |
B. Sanal Bellek (MM) | mmap, munmap, mremap, mprotect, brk, madvise, memfd_create | mm.MemoryManager (4 KB VMA ağacı) ve pgalloc.MemoryFile | WHvMapGpaRange, hv_vm_map + TTBR0_EL1 veya kesim mmap/mprotect aracılığıyla çift yönlü 4 KB sayfa tablosu güncellemeleri |
C. Dosya ve Depolama (VFS2) | openat, pread64, pwrite64, getdents64, statx, renameat2, setxattr, mknod, inotify_add_watch | vfs.VirtualFilesystem bağlama tablosu yönlendiricisi (fsimpl/erofs, fsimpl/ext4lite, fsimpl/hostfs v2) | 1 sabitlenmiş .erofs FD veya 1 .ext4 FD üzerinde çift yönlü pread/pwrite ya da *os.Root üzerinde kapsamlı göreli gezinmeler |
| D. Ağ Oluşturma ve Netfilter | socket, bind, listen, connect, sendmsg, recvmsg, netlink, setsockopt(IPT_SO_SET_REPLACE) | Kullanıcı alanı pkg/tcpip (lo, eth0, docker0, veth, vxlan, wireguard, ipset, iptables-legacy) | Sandbox içi trafik sıfır ana makine sistem çağrısı kullanır; dış trafik net.Dial/net.Listen (-net=nat) veya 1 UDP soketi (-net=wg) ile eşlenir |
Işleyici (rval, ctrl, err) döndürdüğünde Task.doSyscallInvoke(), herhangi bir hatayı negatif bir Linux errno değerine dönüştürür (-ExtractErrno(err, sysno)), dönüş değerini paylaşılan kayıt sayfasına yazar (amd64 üzerinde RAX, arm64 üzerinde X0) ve konuk yürütmeyi devam ettirir.
Depolama (VFS2) ve İki İzli Kullanıcı Alanı Ağı (netstack)
Tüm konuk dosya ve ağ işlemleri Go Sentry içinde üç VFS2 dosya sistemi ve iki pkg/netbackend izi aracılığıyla yürütülür:

| Depolama Motoru | gvx İçindeki Bağlama Rolü | Destekleyen Ana Makine Kaynağı | Çalışma Zamanında Ana Makine openat / NtCreateFile Çağrıları | Windows Defender (WdFilter.sys) Dosya Başına Taramalar |
|---|---|---|---|---|
fsimpl/erofs | Salt okunur OCI imajı alt katmanları | Katman başına tek bir <sha256>.erofs dosyası | 0 | 0 |
fsimpl/ext4lite | Adlandırılmış birimler (-v name:/path) | Birim başına tek bir <name>.ext4 dosyası | 0 | 0 |
fsimpl/hostfs v2 | Ana makine çalışma alanı (-workspace, -v /host:/guest) | Sabitlenmiş *os.Root ana makine dizini | Önbelleğe alınmamış açma başına O(depth) | Ana makine dosyası kapatma başına 1 |
ext4lite'ın Docker, Veritabanları ve Paket Yöneticileri İçin Neden Önemli Olduğu
On binlerce konteyner dosyasını doğrudan Windows NTFS veya macOS APFS üzerine çıkarmak veya yazmak; antivirüs minifilter taramalarını (WdFilter.sys), büyük-küçük harf duyarlılığı çakışmalarını ve eksik POSIX genişletilmiş öznitelikleri tetikler.
pkg/sentry/fsimpl/ext4lite, önceden açılmış tek bir ana makine dosyasının (Windows'ta %LOCALAPPDATA%\gvx\cache\volumes\<name>.ext4, macOS'ta ~/Library/Caches/gvx/volumes/<name>.ext4 veya Linux'ta ~/.cache/gvx/volumes/<name>.ext4) içinde saf Go ile yazılmış bir ext4 dosya sistemi uygular ve şunları içerir:
- 4 KiB blok ve 16 MiB dinamik blok grupları (
meta_bg): Seyrek dosya tahsisi duraklamaları olmadan dinamik olarak büyür (Linux'tafallocate, macOS'tafcntl(F_PREALLOCATE), Windows'taFileAllocationInfo) ve temiz ayırmada kullanılmayan sondaki grupları sıkıştırır. - JBD2 sıralı mod günlüğü (inode 8): CRC-32 sağlama toplamları ve iptal blokları ile atomik işlem commit'leri, ayrıca
fsckLitekurtarması. overlayfsüst katman desteği:trusted.overlay.*vesecurity.capabilitygenişletilmiş öznitelikleri, karakter aygıtı silme işaretleri (0:0),d_typedizin girdisi raporlaması veRENAME_EXCHANGEuygular.
Uygulamalı İş Yükleri: Docker Engine, Kubernetes (k3s + Calico) ve Go SDK
rungv'nin Kurulumu: SLSA ile Doğrulanmış Hazır Sürümler veya go install
linux/amd64, linux/arm64, darwin/arm64, windows/amd64 veya windows/arm64 için hazır bir rungv arşivini GitHub Releases adresinden indirebilirsiniz (her biri Sigstore kaynak paketi ve SHA256SUMS ile SLSA sürüm hattı tarafından oluşturulmuştur) veya doğrudan kaynaktan go install ile kurabilirsiniz:
1# Seçenek A: Hazır bir sürümü indirin ve SLSA derleme kaynağını doğrulayın
2gh attestation verify rungv-v0.2.0-linux-amd64.tar.gz --repo gfire-sigs/gvx \
3 --signer-workflow gfire-sigs/gvx/.github/workflows/release.yml \
4 --source-ref refs/tags/v0.2.0 --deny-self-hosted-runners
5shasum -a 256 -c SHA256SUMS --ignore-missing
6tar -xzf rungv-v0.2.0-linux-amd64.tar.gz
7
8# Seçenek B: Go ile doğrudan kurun (Linux / Windows)
9CGO_ENABLED=0 go install z.gfire.dev/gvx/cmd/rungv@latest
macOS (
darwin/arm64) üzerinde hazır sürüm arşivi zatencom.apple.security.hypervisoryetkisiyle imzalanmıştır (xattr -d com.apple.quarantine rungvkomutu tarayıcı karantina işaretini temizler). macOS üzerindego installveyago buildile yerel olarak derlerseniz, ikiliyicodesign --sign - --entitlements entitlements.plist --force $(which rungv)komutuyla imzalayın.
1. Ayrıcalıksız Bir Docker Engine Çalıştırma (docker:dind)
docs/docker-engine.md belgesini takip ederek, Windows, macOS veya Linux üzerinde rungv içinde değiştirilmemiş bir docker:dind konteyneri çalıştırabilir ve ana makinedeki docker CLI ile kontrol edebilirsiniz:
1# 1. İletilen Unix soketi için ana makine dizinini oluşturun
2mkdir -p ~/.gvx
3
4# 2. ext4lite birimiyle bir gvx sandbox içinde docker:dind'i başlatın
5rungv run \
6 -p unix:~/.gvx/docker.sock:2375 \
7 -p 127.0.0.1:9000-9019:9000-9019 \
8 -v gvx-docker:/var/lib/docker \
9 -e DOCKER_TLS_CERTDIR= \
10 docker:dind --tls=false
İkinci bir terminalde, ana makinedeki docker CLI'ı sandbox soketine yönlendirin:
1docker context create gvx --docker host=unix://$HOME/.gvx/docker.sock
2docker context use gvx
3
4docker info --format '{{.Driver}} {{.OperatingSystem}}'
5# Çıktı: overlayfs Alpine Linux ... (containerized)
6
7docker build -t myapp ./app
8docker compose up -d
2. Ayrıcalıksız Sandbox'larda Kubernetes (k3s + Calico) Çalıştırma
gvx, /dev/kmsg, cgroup v2 (memory.max OOM öldürücüsü ve cpu.max bant genişliği kısıtlaması), /proc/diskstats, wireguard ve vxlan netlink aygıtları, ipset ile iptables-legacy (addrtype, conntrack, statistic, recent) özelliklerini uyguladığı için, değiştirilmemiş bir rancher/k3s imajı tek bir rungv süreci içinde Ready durumuna ulaşır:
1mkdir -p ~/.gvx/k3s
2
3rungv run \
4 -e IPTABLES_MODE=legacy \
5 -p 127.0.0.1:6443:6443 \
6 -p 127.0.0.1:30000-30019:30000-30019 \
7 -v k3s:/var/lib/rancher \
8 --mount type=bind,src=$HOME/.gvx/k3s,dst=/output \
9 rancher/k3s:v1.31.4-k3s1 server \
10 --disable=traefik,servicelb \
11 --write-kubeconfig=/output/kubeconfig.yaml \
12 --write-kubeconfig-mode=644
Ayrıca birden fazla gvx düğümünü WireGuard üzerinden (flannel-backend=wireguard-native veya bir wg0 ağı) gömülü etcd yüksek erişilebilirliği ile birleştirebilir ya da Kubernetes NetworkPolicy kurallarını tamamen kullanıcı alanında uygulamak için Calico (calico-vxlan.yaml ile FELIX_IPTABLESBACKEND=Legacy) çalıştırabilirsiniz.
3. z.gfire.dev/gvx/pkg/gvx ile Go'da Linux Konteynerlerini Gömme
Go uygulamaları, harici bir konteyner daemon'ı olmadan Linux konteynerlerini doğrudan gömebilir:
1package main
2
3import (
4 "context"
5 "fmt"
6 "os"
7
8 "z.gfire.dev/gvx/pkg/gvx"
9)
10
11func main() {
12 ctx := context.Background()
13 sb, err := gvx.New(ctx, gvx.Config{
14 Platform: gvx.PlatformAuto,
15 NetworkMode: gvx.NetModeNAT,
16 OCIImage: "alpine:3.20",
17 WorkspacePath: "./repo",
18 Argv: []string{"/usr/bin/git", "status"},
19 Stdout: os.Stdout,
20 Stderr: os.Stderr,
21 })
22 if err != nil {
23 fmt.Fprintf(os.Stderr, "init sandbox: %v\n", err)
24 os.Exit(1)
25 }
26 defer sb.Close()
27
28 exitCode, err := sb.Run(ctx)
29 if err != nil {
30 fmt.Fprintf(os.Stderr, "run sandbox: %v\n", err)
31 os.Exit(1)
32 }
33 os.Exit(exitCode)
34}
Bu Serinin Devamı
- gvx: Tek Bir Ayrıcalıksız Süreçte Linux Konteynerlerini, Docker'ı ve Kubernetes'i Çalıştırma (bu yazı)
- Root veya User Namespace Olmadan Docker, docker build ve docker compose Çalıştırma:
sudo,unshare(CLONE_NEWUSER),mount(2)ve/dev/fuseerişiminin engellendiği kilitli sandbox'lardadocker:dindnasıl başlatılır. - gvx ile gVisor ve İç İçe Sandbox'lar İçinde Docker-in-Docker Çalıştırma:
apt-get install docker.iokomutu ve iç içerunscnedengVisoriçinde beş çekirdek engelinde başarısız olur vegvx, paylaşılan bellekli futex döngüsünü kullanarak iç içedocker:dindi nasıl çalıştırır. - gvx ile AI Ajanı RL Rollout'ları için Hızlı İzole Docker Ortamları: Yüzlerce paralel ayrıcalıksız
docker:dindörneği ve 100 milisaniyelik kopyala-yazma.ext4birim sıfırlamaları ileSWE-benchve ajan pekiştirmeli öğrenme rollout'larını ölçeklendirme.