Gerçek Docker kurulum scriptimizin ilk sürümü paket kurulumu başarılı ilerlerken beklenmedik biçimde exit code 141 ile kesildi. Kök neden Docker Engine değildi: scriptte set -o pipefail aktifti ve yalnız çıktı göstermek için kullanılan 'apt-cache policy docker-ce | head -n 20' pipelineında head erken kapandığı için upstream SIGPIPE aldı. Aynı görüntülemeyi 'sed -n 1,20p' ile değiştirince script normal devam etti ve finalde Docker 29.7.2 + Compose v5.4.0 doğrulandı.
set -o pipefail
apt-cache policy docker-ce | head -n 20
↓
head erken kapanır
upstream SIGPIPE
128 + SIGPIPE(13) = exit 141
↓
apt-cache policy docker-ce | sed -n '1,20p'
↓
script devam ederScript paket kurulumundan sonra sürüm adayını göstermek için apt-cache policy çıktısını head ile kısaltıyordu. set -o pipefail aktif olduğu için pipeline içindeki upstream SIGPIPE hata statüsü tüm scripti başarısız saydırdı.
Bu nedenle 141'i doğrudan 'Docker kurulamadı' şeklinde yorumlamak yanlıştı.
set -o pipefailapt-cache policy docker-ce | head -n 20echo $?Unix shell dünyasında signal ile sonlanan prosesler sıkça 128 + signal numarası biçiminde raporlanır. SIGPIPE signal numarası 13 olduğu için 128 + 13 = 141 olur.
head ihtiyaç duyduğu satırı aldıktan sonra pipe'ı kapatır; upstream hâlâ yazıyorsa SIGPIPE alabilir.
pipefail kapalıyken pipeline statusu genellikle son komutun statusudur; head 0 ile çıkarsa problem görünmeyebilir. pipefail açıkken pipeline içindeki başarısız upstream statusu korunur.
set -e de kullanılıyorsa bu non-zero status scripti tamamen sonlandırabilir.
set -euo pipefailapt-cache policy çok satır üretir. head -n 20 yirminci satırdan sonra okumayı bırakır. Üst komut yazmaya devam ederse pipe kapalı olduğu için SIGPIPE görür.
Bu bir veri/doğruluk problemi değil, pipeline lifecycle problemidir.
apt-cache policy docker-ce | head -n 20Gerçek düzeltmede görüntüleme satırı 'apt-cache policy docker-ce | sed -n 1,20p' olarak değiştirildi. sed çıktının ilk 20 satırını yazdırırken input akışını tüketmeye devam ettiği için upstream erken kapatılmış pipe ile karşılaşmadı.
Böylece pipefail korunurken gereksiz SIGPIPE kaldırıldı.
apt-cache policy docker-ce | sed -n '1,20p'141 sonrası docker --version, docker compose version, systemctl is-active docker ve hello-world testleri Docker Engine'in gerçek durumunu gösterir.
Bizim final gerçek ekranımız Docker 29.7.2 ve Compose v5.4.0 durumunu doğruladı.
docker --versiondocker compose versionsystemctl is-active dockerdocker run --rm hello-worldVersion/policy gösteren yardımcı komutları kritik kurulum adımlarından ayırın. Gerçek failure kabul edeceğiniz komutlarla yalnız kullanıcıya bilgi veren komutları aynı hata politikasına bağlamayın.
Gerekirse belirli non-critical komuta kontrollü fallback ekleyin; ama gerçek apt/docker hatalarını körlemesine '|| true' ile saklamayın.
Düzeltmeden sonra kurulum akışı tamamlandı; Docker Engine, Compose ve Portainer gerçek ekranlarda çalışır durumda doğrulandı. Bu sonuç kök nedenin Docker Engine değil Bash pipeline olduğunu destekliyor.
Benzer 141 hatasında önce hangi pipelineın son çalıştığını logdan bulun.



Bu vakada SIGPIPE ile ilişkilidir: 128 + signal 13.
Hayır; gerçek final Docker kurulumunun çalıştığını gösterdi.
apt-cache policy docker-ce | head -n 20.
Upstream komutun non-zero statusunu pipeline sonucuna taşır.
Pipeline non-zero olduğunda script tamamen çıkabilir.
İstenen satır sayısından sonra pipe'ı erken kapatır.
head yerine sed -n '1,20p'.
Kritik hataları saklayabileceği için körlemesine kullanılmamalı.
docker --version, compose version, service status ve hello-world.
Hayır; SIGPIPE alabilecek farklı pipeline senaryoları olabilir.
İstenen satırları yazdırırken inputu tüketmeye devam edebilir.
Exit 141'den hemen önce çalışan pipelineı.
Olabilir; apt-cache/apt update ve gerçek package install sonucunu ayrıca kontrol edin.
Evet; pipefail kullanan non-interactive Bash scriptlerinde aynı pattern görülebilir.
Docker ve self-hosted servisleri EKA Sunucu Linux VPS üzerinde çalıştırabilirsiniz.
Güncellendi: 10.08.2026