Oxcart İndir
Menü

Apple silicon üzerinde Docker Compose: amd64 imajları, Rosetta ve sağlık denetimleri

Docker Compose, Apple silicon Mac'lerde yerel olarak çalışır: varsa arm64 imajlarını kullanın, diğerleri için platform: linux/amd64 ayarlayın ve up --wait ile başlangıcı sağlık denetimlerine bağlayın. Oxcart, docker CLI ve Buildx ile birlikte Compose 5.6 sunar, amd64 imajlarını Rosetta üzerinden çalıştırır ve test ettiğimiz üç çalışma zamanı arasında derleme ve konteyner yaşam döngüsü işlemlerinde en hızlısıydı.

Güncelleme

Önce arm64, gerektiğinde amd64

M serisi bir Mac, Linux konteynerlerini arm64 Linux çekirdeğinde çalıştırır. Çok mimarili bir imajı (postgres, redis, node, python ve çoğu resmi imaj) çektiğinizde Docker otomatik olarak arm64 çeşidini seçer ve yerel hızda çalıştırır.

Bazı imajlar hâlâ yalnızca amd64 için sunulur: eski kurum içi imajlar, tedarikçi araçları ve platform bayrağı olmadan Intel dizüstü bilgisayarda veya CI çalıştırıcısında derlenenler. Bunlar için platformu açıkça belirtin:

services:
  legacy-tool:
    image: example/amd64-only-tool:1.4
    platform: linux/amd64

Oxcart amd64 imajlarını Apple'ın x86-64 çeviricisi Rosetta üzerinden çalıştırır; Buildx, motorun yerel olarak çalıştıracağı amd64 imajlarını derleyip yükleyebilir. Konteynerin gerçekte hangi mimaride çalıştığını docker run --rm --platform linux/amd64 alpine uname -m ile kontrol edin; çıktı x86_64 olur.

Her servis için platform seçimi
DurumYapılması gereken
İmajın arm64 sürümü varHiçbir şey. Compose arm64 çeşidini çeker.
İmaj yalnızca amd64 içinServise platform: linux/amd64 ekleyin.
amd64 sunuculara dağıtım yapıyorsunuzGöndereceğiniz imajı docker buildx build --platform linux/amd64 ile derleyin; yığınınız izin veriyorsa yerel çalışmada arm64 kullanmaya devam edin.
"exec format error"Bir ikili dosya konteynerin mimarisiyle eşleşmiyor. Platformu ayarlayın veya arm64 için yeniden derleyin.

Tam bir örnek

Postgres veritabanı, mevcut klasörden derlenen ve veritabanı sağlıklı olana kadar bekleyen bir API ve profil aracılığıyla etkinleştirilen yalnızca amd64 için bir araç:

services:
  db:
    image: postgres:17-alpine
    environment:
      POSTGRES_PASSWORD: dev
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 2s
      timeout: 3s
      retries: 15

  api:
    build: .
    init: true
    environment:
      DATABASE_URL: postgres://postgres:dev@db:5432/postgres
    ports:
      - "127.0.0.1:8080:8080"
    depends_on:
      db:
        condition: service_healthy

  legacy-tool:
    image: example/amd64-only-tool:1.4
    platform: linux/amd64
    profiles: ["tools"]

volumes:
  pgdata:

Her bölümün görevi:

  • healthcheck, Postgres'in yalnızca başlamış olmasını değil, gerçekten bağlantı kabul ettiğini Compose'a bildirir.
  • depends_on: condition: service_healthy, denetim başarılı olana kadar API'yi bekletir.
  • init: true, sinyallerin sürecinize ulaşması ve zombi süreçlerin temizlenmesi için PID 1 olarak küçük bir init çalıştırır. Böylece docker stop, zaman aşımını beklemek yerine temiz biçimde sonlanır.
  • 127.0.0.1:8080:8080, API'yi yalnızca Mac'in loopback adresinde yayınlar. Adres belirtilmezse yayınlanan port Mac'in tüm IPv4 adreslerinde dinler ve ağınızdaki diğer makineler ona erişebilir.
  • pgdata adlandırılmış bir birimdir: veriler docker compose down sonrasında kalır ve yalnızca down -v ile silinir.

Apple silicon üzerinde Compose yığını çalıştırın

  1. Araçları kontrol edin. docker compose version ve docker context show çalıştırın. Oxcart, docker CLI 29.9.0 ve Buildx 0.38.0 ile birlikte Docker Compose 5.6.0 sunar; bağlamının adı oxcarttır.
  2. Compose dosyasını yazın. Uygulamanızın beklediği her servise healthcheck ekleyin ve bağımlı servisleri depends_on: condition: service_healthy ile bekletin.
  3. Başlatın ve sağlıklı durumu bekleyin. docker compose up -d --build --wait çalıştırın. Komut, tüm servisler çalışır ve sağlıklı duruma geldiğinde döner; herhangi biri değilse başarısız olur.
  4. Portları kontrol edin. docker compose ps çalıştırın veya Oxcart'ta Ports görünümünü açın; yayınlanan her portun hazır, beklemede veya başarısız olduğunu nedeniyle birlikte gösterir.
  5. Geliştirmeye devam edin. Kodu düzenleyin ve docker compose up -d --build api çalıştırın. Değişmeyen derleme adımları önbellekten gelir.
  6. Ortamı kaldırın. Konteynerleri durdurup kaldırmak için docker compose down, adlandırılmış birimleri de silmek için docker compose down -v çalıştırın.

Daha hızlı yeniden derlemeler

Compose, Buildx ve BuildKit üzerinden derler. Dockerfile'da bağımlılık kurulumlarını COPY . . öncesine yerleştirin; böylece kod değişikliği, bu satırın üzerindeki önbellekli tüm katmanları yeniden kullanır. Oxcart'ta ölçüm projesinin önbellekli derlemesi 121 ms, yerel bağlamla önbelleksiz derlemesi 341 ms sürdü: her ikisinde de test ettiğimiz üç çalışma zamanı arasında en hızlıydı. Kısa geliştirme döngülerinin kazancı birikir: docker run --rm 42 ms, 20 konteyneri durdurup kaldırmak 77 ms sürdü.

Oxcart 0.1.2, beraberindeki docker 29.9 istemcisiyle 2026-10-10 tarihinde ölçüldü; diğer çalışma zamanları aynı günün daha erken saatlerinde, aynı Mac ve test düzeneğinde docker 29.4 ile ölçüldü. Apple M5 Max, her birine 8 CPU ve 12 GiB, çalışma zamanları tek tek çalıştırıldı.

Portlar, Mac ve diğer servisler

  • Port sözdizimi Docker'ınkiyle aynıdır: TCP ve UDP, geçici portlar ("127.0.0.1::8080") ve IPv4 ile IPv6 üzerinde dinlemek için "[::]:8080:80". TCP ve UDP aynı host port numarasını paylaşabilir.
  • Konteynerden Mac'e erişim: host.docker.internal, konteynerlerden ve derleme adımlarından TCP üzerinden Mac'in 127.0.0.1 adresine bağlı servislere ulaşır.
  • Yerel kayıt deposu: bir kayıt deposu konteynerini 5000 portunda yayınlayın; docker push localhost:5000/app ona ulaşır.
  • Sidecar'lar: network_mode: service:api, konteyneri başka bir servisin ağ ad alanına yerleştirir; böylece o servisin localhost adresini paylaşır.

VPN, DNS, güvenlik duvarları ve ağ yolunun nasıl korunduğu için Mac'te konteyner ağları rehberine bakın.

Adlandırılmış birimler ve bind mount'lar

Veritabanının veya derlemenin yoğun yazdığı her şey için adlandırılmış birimler kullanın: node_modules, paket önbellekleri, veritabanı dosyaları. Veriler motorun depolama alanında kalır; Oxcart'ta adlandırılmış birim 1.000 küçük dosya oluşturma, stat, okuma ve silme işlemini 17.8 ms içinde tamamladı; test ettiğimiz üç çalışma zamanı arasında en hızlısıydı.

Mac'inizde düzenlediğiniz kaynak kod için bind mount kullanın. Oxcart varsayılan olarak ana klasörünüzü, /private/tmp ve /private/var/folders yollarını konteynerlerle okuma-yazma erişimiyle paylaşır; Mac'teki düzenlemeler konteynerlerde, konteynerlerdeki değişiklikler Mac'te görünür. Bilmeniz gereken bir sınır: Mac'te yapılan dosya değişiklikleri konteynerlerin içinde inotify olayları üretmez; bu yüzden konteynerdeki dosya izleyicisi, editörünüzdeki değişiklikleri görmesi gerekiyorsa periyodik yoklama kullanmalıdır.

Sorun giderme

Apple silicon Mac'te yaygın Compose sorunları
BelirtiNedenÇözüm
exec format errorarm64 konteynerde amd64 ikili dosya veya tersiplatform: linux/amd64 veya arm64 için yeniden derleme
"no matching manifest for linux/arm64"İmajın arm64 çeşidi yokplatform: linux/amd64
"address already in use"Host portunu başka bir süreç veya konteyner kullanıyorHost portunu değiştirin veya Oxcart'ın Ports görünümünde sahibini bulun
Yayınlanan portta bağlantı reddedildiSunucu konteynerin içinde 127.0.0.1 üzerinde dinliyor veya henüz hiçbir şey dinlemiyor0.0.0.0 üzerinde dinleyin; sağlık denetimi ekleyin ve --wait kullanın
Uygulama veritabanı hazır olmadan başlıyorKoşulsuz depends_on yalnızca başlamayı beklercondition: service_healthy ve healthcheck
docker stop 10 s bekliyorPID 1, SIGTERM'i yok sayıyorinit: true veya uygulamada SIGTERM işleme

Sorular

Docker Compose, Apple silicon Mac'lerde çalışır mı?

Evet. Compose arm64 üzerinde yerel olarak çalışır ve çoğu resmi imaj arm64 çeşitleri sunar. Oxcart, Docker Compose 5.6.0 içerir; uyumluluk kontrolleri birden fazla servisi, sağlık denetimi bağımlılıklarını, up --wait, build, down, servis adına göre DNS, init: true ve network_mode: service: özelliklerini kapsar.

M serisi Mac'te amd64 (x86-64) imajı nasıl çalıştırılır?

Serviste platform: linux/amd64 ayarlayın veya docker run komutuna --platform linux/amd64 geçin. Oxcart amd64 imajlarını Rosetta üzerinden çalıştırır. Varsa yerel arm64 imajını tercih edin; arm64 derlemesi olmayan imajlarda amd64 kullanın.

"exec format error" ne demektir?

Konteyner, çalıştığı CPU mimarisinden farklı bir mimari için derlenmiş ikili dosyayı çalıştırmaya çalıştı. Genellikle imaj veya içindeki bir ikili dosya yalnızca amd64 içindir. Servise platform: linux/amd64 ekleyin veya imajı arm64 için yeniden derleyin.

Konteyner çalışırken uygulamam neden "connection refused" diyor?

En yaygın neden, sunucunun konteynerin içinde 127.0.0.1 üzerinde dinlemesidir. Yayınlanan portlar konteynerin loopback adresine değil, ağ arayüzüne ulaşır; bu yüzden sunucu 0.0.0.0 üzerinde dinlemelidir. Oxcart'ın Ports görünümü bu durumu açıkça belirtir.

Bir servisin başka bir servis hazır olana kadar beklemesini nasıl sağlarım?

Bağımlı olunan servise healthcheck, bekleyecek servise depends_on: { db: { condition: service_healthy } } ekleyin. Böylece docker compose up --wait yalnızca tüm servisler sağlıklı olduğunda döner.

Konteynerler Mac'imde çalışan sunucuya ulaşabilir mi?

Evet. host.docker.internal kullanın: Oxcart'ta konteynerlerden ve derlemelerden TCP üzerinden Mac'in 127.0.0.1 adresine bağlı servislere ulaşır.

Veritabanları için adlandırılmış birimler mi, bind mount mu kullanmalıyım?

Veritabanı verileri için adlandırılmış birim kullanın: motorun kendi depolama alanında bulunur. Mac'te düzenlediğiniz kaynak kod için bind mount kullanın. Oxcart'ta adlandırılmış birim 1.000 küçük dosya oluşturma, stat, okuma ve silme işlemini 17.8 ms içinde tamamladı.

Kaynaklar ve yöntem

  • Uyumluluk: Oxcart'ın doğrulanmış entegrasyon yolları (docker CLI, sağlık denetimi bağımlılıklarıyla Compose, up --wait, init: true, network_mode: service:, Buildx, Rosetta üzerinden amd64).
  • Hız verileri: Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPU ve 12 GiB, ısınma sonrası beş örneğin medyanları; diğer çalışma zamanları aynı günün daha erken saatlerinde, aynı Mac ve test düzeneğinde docker 29.4 istemcisiyle ölçüldü.
  • Birlikte gelen araçlar: docker 29.9.0, Docker Compose 5.6.0, Buildx 0.38.0.

Oxcart'ı kendi projelerinizde deneyin

60 gün ücretsiz. Ardından kullanıcı ve ana sürüm başına $20: abonelik değil.

Apple silicon · macOS 26 veya üzeri

Sıradaki yazı

Sürüm notları

Oxcart 0.1.4

En yeni sürüm

Lisanslama ve iyileştirmeler.

  • E-postayla gönderilen güvenli bağlantı üzerinden lisans etkinleştirme.
  • Settings üzerinden lisans ve Mac yönetimi.
  • Çevrimdışı lisans doğrulama.
  • Performans iyileştirmeleri, arayüz düzenlemeleri ve hata düzeltmeleri.

macOS 26.0 veya üzeri gerekir

Oxcart 0.1.3

Boştayken belleği geri kazanma.

  • Çalışan konteyner olmadığında VM belleğini serbest bırakır.
  • Konteynerları, imajları, birimleri ve ağları korur.

macOS 26.0 veya üzeri gerekir

Oxcart 0.1.2

Komut satırı araçlarıyla entegrasyon.

  • Oxcart’la birlikte gelen Docker araçları ile mevcut kurulum arasında geçiş yapın.
  • Arayüz düzenlemeleri.

macOS 26.0 veya üzeri gerekir

Oxcart 0.1.1

Uygulamayla gelen Docker araçları ve ajan kontrolleri.

  • Docker CLI 29.9, Compose 5.6 ve Buildx 0.38 dahildir.
  • Docker bağlamı entegrasyonu ve kimlik bilgilerinin Anahtar Zinciri’nde güvenli saklanması.
  • Ajan başına izin ve engelleme seçenekleriyle MCP ajan bağlantıları.

macOS 26.0 veya üzeri gerekir

Oxcart 0.1.0

Apple silicon için Docker uyumlu konteynerlar.

  • Docker CLI, Compose ve Buildx uyumluluğu.
  • Uygulamayla gelen çalışma zamanı bileşenleriyle çevrimdışı kurulum.
  • Projeye ve Git dalına göre düzenlenmiş portlar.
  • Varsayılan olarak salt okunur erişimle MCP entegrasyonu.
  • Doğrulanan otomatik güncellemeler.

macOS 26.0 veya üzeri gerekir