Docker Proxy: Kurumsal Güvenlik Duvarlarının Arkasında Konteynerleri Çalıştırmak İçin Eksiksiz Rehber
Kurumsal güvenlik duvarlarının arkasında Docker işlemlerinizin güvenilir şekilde çalışması için her katmanda proxy yapılandırmasını nasıl kuracağınızı öğrenin.
Çoğu kurumsal ağ, internet trafiğini izlemek ve filtrelemek için proxy sunucuları kullanır. Bu durum, Docker’ın kayıt defterlerinden imaj çekmeye çalıştığında engellere yol açar. Ev ağınızda çalışan işlemler, bağlantı zaman aşımlarına, kimlik doğrulama hatalarına ve başarısız build’lere dönüşebilir. Bu proxy kaynaklı sorunlar, ihtiyaç duydukları temel imajlara erişemeyen geliştirme ekiplerini sekteye uğratabilir.
Docker proxy yapılandırması, bu bağlantı sorunlarını çözer; önbellekleme sayesinde performansı artırır ve kurumsal güvenlik gereksinimlerini karşılar. Yapılandırma tamamlandığında, konteynerleriniz ağ kısıtlamalarından bağımsız olarak imajları çekebilir.
Bu eğitimde, Docker daemon proxy ayarlarını yapmayı, konteyner ortam değişkenlerini tanımlamayı ve Docker Compose içinde proxy yapılandırmasını ele almayı adım adım göstereceğim.
Docker’a yeni misiniz ve tüm ağ kavramları gözünüzü mü korkutuyor? Docker temelleriyle başlayın ve özgüveninizi adım adım geliştirin.
Docker Proxy Mimarisi Anlama
Docker ekosisteminin farklı bölümleri, farklı katmanlarda proxy yapılandırmasına ihtiyaç duyar.
Proxy’ler, Docker bileşenleriniz ile harici ağlar arasında aracı olarak davranır. Docker imaj çektiğinde, konteynerlerin internete erişmesi gerektiğinde ya da build’ler harici kaynaklara ihtiyaç duyduğunda, bu bağlantıları proxy sunucuları kontrol eder ve izler. Konteynerleştirilmiş uygulamalarınız ile dış dünya arasına oturur, istek ve yanıtları filtreler.
Kuruluşlar Docker ile proxy’leri performans, güvenlik ve uyumluluk için kullanır.
Performans, temel imajlar gibi sık erişilen kaynakların önbelleğe alınmasıyla gelir; bu da ekip genelinde indirme sürelerini azaltır. Güvenlik faydaları arasında trafik filtreleme, kötü amaçlı yazılım taraması ve yetkisiz sitelere erişimi engelleme bulunur. Uyumluluk gereksinimleri ise tüm ağ trafiğinin uygun erişim kontrolleri ve denetim izleriyle izlenen kanallardan geçmesini zorunlu kılar.
Docker proxy yapılandırması dört katmanda gerçekleşir:
İstemci proxy’si:docker pull ve docker push gibi Docker CLI komutlarını etkiler
Daemon proxy’si: Docker daemon’ın harici kayıt defterlerine erişimini kontrol eder
Konteyner çalışma zamanı proxy’si: uygulamalar için konteyner içinde proxy değişkenlerini ayarlar
Build zamanı proxy’si: Dockerfile’ların internet erişimine ihtiyaç duyduğu docker build işlemleri sırasında proxy ayarlarını yönetir
Her katman belirli bir amaca hizmet eder ve kendine özgü bir yapılandırma yaklaşımı gerektirir.
Docker’ı Bir Proxy ile Kullanacak Şekilde Yapılandırma
Docker’ın kurumsal proxy’nizle çalışması için hem Docker daemon’ı hem de istemciyi yapılandırmanız gerekir.
Neden? Çünkü farklı türde ağ isteklerini ele alırlar.
Daemon, imaj çekme/itme ve kayıt defteri kimlik doğrulamasını yönetirken, istemci CLI işlemlerini ve API çağrılarını yönetir. Her iki yapılandırmadan biri eksik olursa, Docker işlemlerinin bağlantı hatalarıyla başarısız olmasına yol açabilecek boşluklar oluşur.
noProxy alanı, proxy’yi atlaması gereken adresleri listeler. Buraya dahili kayıt defteri alan adlarınızı ve localhost adreslerini ekleyin.
systemd servis geçersiz kılmaları (override) ayarlama
systemd tabanlı Linux sistemlerinde, Docker servisinin kendisini de proxy kullanacak şekilde yapılandırmanız gerekir. Geçersiz kılma dizinini ve yapılandırma dosyasını oluşturun:
Bu, Docker daemon sürecinin proxy üzerinden harici servislere ulaşabilmesini sağlar.
Docker, daemon yeniden başlatılana kadar proxy değişikliklerini almaz. systemd’yi yeniden yüklemek ve Docker’ı yeniden başlatmak için şu komutları çalıştırın:
Daemon’ın yeniden yüklenmesi, systemd’nin yeni servis yapılandırmasını okumasını sağlar; Docker’ın yeniden başlatılması ise daemon.json değişikliklerini uygular.
Platforma özgü hususlar
Docker Desktop, proxy yapılandırmasını sunucu kurulumlarından farklı şekilde ele alır. Windows ve macOS’ta, Kaynaklar - Proxies bölümünden Docker Desktop arayüzünü kullanarak proxy ayarlarını yapın. Bu ayarlar, daemon ve istemciyi otomatik olarak yapılandırır.
Docker Engine kullanan Linux ana makineleri, yukarıda açıklanan manuel yapılandırmaya ihtiyaç duyar. Bazı dağıtımlar Docker’ı farklı paketler; sisteminizin dockerd’ı doğrudan mı yoksa farklı bir servis yöneticisi aracılığıyla mı kullandığını kontrol edin.
Yapılandırmanızı doğrulama
Basit bir pull komutuyla Docker’ın harici kayıt defterlerine ulaşabildiğini test edin:
Docker CLI komutlarının, daemon ayarlarından ayrı kendi proxy yapılandırmasına ihtiyacı vardır. Ortam değişkenleri, Docker istemcilerinin kurumsal proxy’ler üzerinden nasıl bağlandığını esnek biçimde kontrol etmenizi sağlar.
İstemci proxy’leri, docker pull, docker push ve docker login gibi Docker CLI işlemlerini kontrol eder. Bu komutları çalıştırdığınızda, Docker istemcisi kayıt defterlerine HTTP istekleri yapar ve hangi proxy sunucusunu kullanacağını bilmesi gerekir. İstemci proxy ayarları olmadan, daemon doğru yapılandırılmış olsa bile bu işlemler başarısız olur.
JSON yapılandırma yöntemi
En temiz yaklaşım, Docker’ın ~/.docker/config.json dosyasını kullanmaktır:
Kullanıcı başına yapılandırma için, kabuk profilinize (~/.bashrc, ~/.zshrc) ekleyin veya JSON yapılandırma yöntemini kullanın. Kullanıcı bazlı ayarlar, geliştiricilere farklı proxy’ler kullanma ya da test amaçlı tamamen atlama esnekliği sağlar.
Güvenlik hususları
Kullanıcı adı ve parolaları hiçbir zaman yapılandırma dosyalarına veya ortam değişkenlerine düz metin olarak yazmamalısınız.
Düz metin proxy kimlik bilgileri, özellikle paylaşılan ortamlarda veya sürüm kontrol sistemlerinde güvenlik riski oluşturur.
Bunun yerine şu yaklaşımları kullanın:
Mümkünse proxy sunucunuzu IP tabanlı kimlik doğrulamasına göre yapılandırın
Kimlik doğrulama için kimlik bilgisi yardımcıları veya güvenli depolama sistemleri kullanın
Docker işlemleri için asgari izinlere sahip hizmet hesapları ayarlayın
Build argümanları, build bağlamı içinde ortam değişkenlerine dönüşür.
Bu sayede RUN talimatları paketleri ve bağımlılıkları proxy üzerinden indirebilir. Bu argümanlar olmadan, Dockerfile’lar yazılım kurmaya veya internetten kaynak çekmeye çalıştığında build işlemleri başarısız olur.
Build zamanı proxy ayarları, Dockerfile’ınızda ENV talimatlarıyla açıkça ayarlamadığınız sürece nihai imajda kalıcı olmaz.
Ortam değişkenleri, iş akışınıza uygun düzeyde proxy ayarlarını ele almanız için esneklik sağlar.
Build argümanları kafanızı mı karıştırıyor? Docker build argümanlarına gerçekten çalışan örneklerle hakim olun.
Konteyner ve Build Zamanı Proxy Enjeksiyonu
Sadece Docker istemcisini yapılandırmak yeterli değildir — konteynerlerinizin ve build’lerinizin kendi proxy ayarlarına ihtiyacı vardır. Bu bölümde, proxy yapılandırmasını çalışma zamanında ve build zamanında nasıl enjekte edeceğinizi göstereceğim.
Çalışma zamanı ortam değişkenleri
Konteynerler, ana makinenizin proxy ayarlarını devralmaz.
Konteynerleri başlatırken proxy değişkenlerini açıkça geçirmeniz gerekir. Tüm konteynerleri mi yoksa sadece belirli olanları mı yapılandırmak istediğinize bağlı olarak Docker size birden fazla yol sunar.
Tutarlı proxy ayarları için en temiz yaklaşım JSON yapılandırmasıdır — daha önce ele aldığımız gibi. Özetle, ~/.docker/config.json dosyanıza bunu ekleyin:
ENV talimatı, build’inizdeki sonraki tüm RUN komutlarında proxy değişkenlerini kullanılabilir kılar.
BuildKit sınırlamalarının, daha yeni Docker sürümlerinde proxy sorunlarına yol açabileceğini bilmelisiniz. BuildKit, build bağlamlarını agresif biçimde önbelleğe alır ve bazen proxy değişikliklerini göz ardı eder.
Her aşama, build argümanlarını devralır; ancak önceki aşamalardaki ortam değişkenlerini devralmaz. İhtiyaç duyan her aşamada proxy değişkenlerini açıkça ayarlayın.
Kısacası — bir kez yapılandırın, her yerde enjekte edin.
Konteynerlerde Paket Yöneticilerini Proxy Kullanacak Şekilde Yapılandırma
Docker’ın proxy ayarları, konteynerlerinizin içindeki paket yöneticilerine otomatik olarak aktarılmaz. Kurumsal proxy üzerinden paket indirmek için her paket yöneticisini ayrı ayrı yapılandırmanız gerekir.
apt-get, yum ve apk gibi paket yöneticileri, paket depolarına doğrudan HTTP bağlantıları kurar. Kısıtlı ağ ortamlarında, paket yöneticisi proxy sunucunuzdan haberdar değilse bu bağlantılar başarısız olur.
Standart ortam değişkenleri yeterli değildir. Çoğu paket yöneticinin, sistem genelindeki proxy ayarlarını geçersiz kılan kendi yapılandırma dosyaları vardır.
Ubuntu/Debian: apt-get yapılandırması
apt-get’in paket kurulumu sırasında okuyacağı bir proxy yapılandırma dosyası oluşturun.
/etc/apt/apt.conf.d/proxy.conf dosyası, apt-get’e tüm paket indirmelerini proxy üzerinden yönlendirmesini söyler. Dosya, build’inizdeki RUN komutları arasında kalıcıdır.
Dahili depolar için proxy istisnaları da ayarlayabilirsiniz:
RUN echo 'Acquire::http::Proxy::internal.company.com "DIRECT";' >> /etc/apt/apt.conf.d/proxy.confAltyapı:
Alpine Linux: apk yapılandırması
Alpine, proxy ayarlarını /etc/apk/repositories ve ortam değişkenlerinden okuyan apk paket yöneticisini kullanır.
Alpine’in apk’si, standart HTTP proxy ortam değişkenlerine uyar; dolayısıyla ayrı yapılandırma dosyalarına gerek yoktur. Yine de daha fazla kontrol için bir dosya oluşturabilirsiniz:
Ayrıca şu komutla belirli alan adlarını proxy yönlendirmesinden hariç tutabilirsiniz:
RUN echo 'proxy_exclude=internal.company.com,localhost' >> /etc/yum.confAltyapı:
Proxy işlevselliğini test etme
Öncelikle, paket yöneticinizin proxy üzerinden depolara ulaşabildiğini doğrulamanız gerekir.
Dockerfile’ınıza test komutları ekleyin:
FROM python:3.13# Configure proxyRUN echo 'Acquire::http::Proxy "http://proxy.company.com:8080";' > /etc/apt/apt.conf.d/proxy.conf# Test package manager connectivityRUN apt-get update && \
apt-get install -y --dry-run curl && \
echo "Package manager proxy test passed"# Install actual packagesRUN apt-get install -y curl python3-pipAltyapı:
--dry-run bayrağı, gerçekte hiçbir şey kurmadan paket çözümlemeyi test eder. Başarılı olursa, proxy yapılandırmanız çalışıyor demektir.
Bağlantı sorunlarını hata ayıklamak için ayrıntılı çıktı ile de test edebilirsiniz:
RUN apt-get -o Debug::Acquire::http=true updateAltyapı:
Bu çıktı, apt-get’in erişmeye çalıştığı URL’leri ve proxy bağlantılarının başarılı olup olmadığını tam olarak gösterir.
Alpine testi için şunları kullanın:
RUN apk update --verbose && \
apk add --simulate curl && \
echo "Alpine proxy test passed"Altyapı:
Özetle, her paket yöneticisini ayrı ayrı yapılandırın; build’leriniz her proxy’nin arkasında çalışır.
Proxy ile ilgili build artifaktlarını temizlemek mi istiyorsunuz? Docker prune komutları alan açar ve sisteminizi temiz tutar.
Gelişmiş Proxy Uygulamaları
Temel HTTP proxy’leri başlangıç için yeterlidir; ancak üretim ortamları, kayıt defteri erişimi ve imaj önbelleklemesi üzerinde daha fazla kontrole ihtiyaç duyar. Daha iyi performans ve güvenilirlik için önbellekleyen proxy’ler ve kayıt defteri aynalarını nasıl kuracağınız aşağıda açıklanmıştır.
Önbellekleyen proxy kayıt defterleri
Aynı temel imajları tekrar tekrar çekmek bant genişliğini boşa harcar ve build’leri yavaşlatır.
Önbellekleyen proxy’ler, Docker istemcileriniz ile Docker Hub gibi harici kayıt defterleri arasına oturur. Sık erişilen imajları yerel olarak saklar; böylece sonraki pull işlemleri internet yerine iç ağınızdan gelir.
Kurumsal ortamlar için en popüler seçenek Harbor’dır:
Bunu /etc/docker/daemon.json dosyasına ekleyip Docker’ı yeniden başlatın. Tüm docker pull komutları önce aynayı dener; ayna kullanılamazsa Docker Hub’a geri döner.
--progress=plain bayrağı, BuildKit’in gerçekte hangi kayıt defterine bağlandığını gösterir. Build çıktısında ayna URL’lerinizi görmelisiniz.
Hepsi bu!
Karmaşık çoklu konteyner proxy kurulumlarını mı yönetiyorsunuz? Docker Compose ağ ve servis keşfini kolaylaştırır.
Güvenliği Sıkılaştırma
Proxy yapılandırmaları, dikkatli ele alınması gereken yeni saldırı olasılıkları açar. İşte Docker soket erişimini kilitlemenin ve proxy kimlik bilgilerini ifşadan korumanın yolları.
Docker soket proxy’si
Docker soketini doğrudan açığa çıkarmak büyük bir güvenlik riski yaratır.
Docker soketi (/var/run/docker.sock), tüm ana sisteminize root düzeyinde erişim verir. Bu sokete yazabilen herhangi bir süreç, ana dosya sistemine erişimli konteynerler başlatabilir, ayrıcalık yükseltebilir veya konteyner izolasyonunu tamamen aşabilir.
Doğrudan soket bağlama tehlikelidir:
# DON'T DO THISdocker run -v /var/run/docker.sock:/var/run/docker.sock myappAltyapı:
Bu desen Docker-içinde-Docker kurulumlarında ve CI/CD hatlarında görülür, ancak güvenlik kabusudur. Tehlikeye atılmış bir konteyner tüm Docker daemon’ını kontrol edebilir.
Soket proxy servisleri daha güvenli bir ara katman oluşturur. Docker API çağrılarını filtreler ve konteynerlerin gerçekte neler yapabileceğini kısıtlar.
Proxy yalnızca belirli Docker API uç noktalarını açığa çıkarır. İzin verilen işlemler için ortam değişkenlerini 1, engellenenler için 0 olarak ayarlayın.
Uygulamalarınız ham soket yerine proxy’ye bağlanır:
docker run --envDOCKER_HOST=tcp://docker-proxy:2375 myappAltyapı:
Uymanız gereken ek soket sıkılaştırma stratejileri:
Soket proxy’sini ayrı bir ağ segmentinde çalıştırın
İstemciler ile proxy arasında TLS kimlik doğrulaması kullanın
Şüpheli API çağrıları için soket proxy günlüklerini izleyin
Proxy erişim kimlik bilgilerini düzenli olarak döndürün
Kimlik bilgisi yönetimi
Düz metin URL’lerdeki proxy kimlik bilgileri her yerde görünür — günlüklerde, süreç listelerinde, ortam dökümlerinde.
Kimlik bilgilerini asla proxy URL’lerine gömmeyin:
# SECURITY RISK - credentials visible in process listexportHTTP_PROXY=http://admin:[email protected]:8080Altyapı:
ps aux ya da ortam değişkeni dökümlerine erişimi olan herkes proxy parolanızı görebilir. Buna uygulama günlükleri, konteyner incelemesi ve sistem izleme araçları dahildir.
Bunun yerine kimlik doğrulama dosyaları kullanın:
# Create credentials file with restricted permissionsecho"admin:password123"> ~/.proxy-creds
chmod600 ~/.proxy-creds
# Configure proxy without embedded credentialsexportHTTP_PROXY=http://proxy.company.com:8080Altyapı:
Proxy sunucunuzu dosyadan kimlik bilgisi okuyacak şekilde yapılandırın veya harici kimlik doğrulama sistemleri kullanın.
TLS proxy’ler, kimlik doğrulama el sıkışmaları dahil tüm proxy trafiğini şifreler:
# HTTPS proxy encrypts credentials in transitexportHTTPS_PROXY=https://proxy.company.com:8443Altyapı:
Proxy sunucunuzu, bir CA’den alınmış veya istemci makinelere dağıtılmış self-signed uygun TLS sertifikalarıyla kurun.
Sertifika tabanlı kimlik doğrulama parolaları tamamen ortadan kaldırır:
Sırlar (secrets) beklemede şifreli kalır ve imaj katmanlarında görünmeden çalışma zamanında enjekte edilir.
Soket erişimini kilitleyin ve kimlik bilgilerinizi şifreleyin — gelecekteki siz minnettar olacaktır.
Proxy kurulumunuz için Docker alternatiflerini mi düşünüyorsunuz? Doğru konteynerleştirme aracını seçmek için Docker ve Podman karşılaştırmasını inceleyin.
Yaygın Sorunları Giderme
Proxy sorunları, zaman aşımları, bağlantı hataları ve ağınızın dışında sorunsuz çalışan esrarengiz build hataları olarak kendini gösterir. En yaygın Docker proxy problemlerini teşhis ve onarmak için sistematik bir yaklaşım aşağıdadır.
Yapılandırılmış tanılama yaklaşımı
Temelden başlayın ve yığın boyunca yukarı doğru ilerleyin.
Adım 1: Ana makinadan proxy bağlantısını doğrulayın
Proxy sunucunuzun erişilebilir olup olmadığını test edin:
Bu, sorunun Docker işlemlerinde mi yoksa konteyner ağında mı olduğunu izole eder.
Yaygın sorunlar ve çözümler
Sorun: docker pull zaman aşımına uğruyor
Docker harici kayıt defterlerine ulaşamadığında şu hatayı görebilirsiniz:
Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io: no such hostAltyapı:
Sorunun nerede meydana geldiğini izole etmek için temel bağlantıyı test ederek başlayın:
# Check if DNS resolution works through proxynslookup registry-1.docker.io
# Test direct registry accesscurl-I https://registry-1.docker.io/v2/
# Verify daemon proxy configurationsudo journalctl -u docker.service |grep-i proxyAltyapı:
Bunu, DNS ve proxy yapılandırma sorunlarını gidererek düzeltin:
/etc/docker/daemon.json dosyasına DNS sunucuları ekleyin
Dahili DNS sunucuları için NO_PROXY yapılandırın
Proxy’nizin HTTPS CONNECT yöntemini destekleyip desteklemediğini kontrol edin
Sorun: Build sırasında paket kurulumu başarısız
Konteyner içindeki paket yöneticileri depolara ulaşamaz ve şu gibi hatalar gösterir:
E: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy/ReleaseAltyapı:
Geçici bir konteynerde doğrudan paket yöneticisi bağlantısını test edin:
# Test package manager connectivity in a running containerdocker run -it--rm python:3.13 bashapt-get update -o Debug::Acquire::http=trueAltyapı:
Ayrıntılı çıktı, bağlantının tam olarak nerede başarısız olduğunu gösterir.
Bunu, paket yöneticilerini proxy kullanacak şekilde yapılandırarak çözün:
Geleneksel günlük dosyalarını kullanan sistemlerde, Docker günlüğünü doğrudan kontrol edin:
# Direct log filesudotail-f /var/log/docker.logAltyapı:
Günlüklerde proxy ile ilgili belirli kalıplara bakın. Bağlantı reddedildi hataları, proxy sunucusunun erişilebilir olmadığını gösterir. Kimlik doğrulama hataları, "407 Proxy Authentication Required" ile görünür. Zaman aşımı hataları ise ağ yönlendirme problemlerini veya proxy sunucusu aşırı yükünü düşündürür.
Konteyner düzeyinde test için curl ve wget, proxy davranışı hakkında ayrıntılı içgörü sağlar.
El sıkışma sırasında tam olarak ne olduğunu görmek için proxy üzerinden HTTP bağlantılarını test edin:
# Test HTTP proxydocker run --rm\-eHTTP_PROXY=http://proxy.company.com:8080 \
python:3.13-slim \curl-v http://httpbin.org/ipAltyapı:
Ayrıntılı çıktı, DNS çözümlemesini, proxy bağlantısının kurulmasını ve gerçek HTTP istek akışını gösterir. Proxy tüneli doğru çalışıyorsa "Connected to proxy.company.com" ve ardından "CONNECT httpbin.org:80" gibi satırlar görürsünüz.
# Test HTTPS proxydocker run --rm\-eHTTPS_PROXY=http://proxy.company.com:8080 \
python:3.13-slim \curl-v https://httpbin.org/ipAltyapı:
Çıktıda "CONNECT httpbin.org:443 HTTP/1.1" ifadesini arayın. "Method not allowed" vb. hatalar görürseniz, proxy’niz HTTPS tünellemeyi desteklemiyor demektir.
Kimlik doğrulamayı proxy URL’sine kimlik bilgilerini gömerek test edin:
# Test with authenticationdocker run --rm\-eHTTPS_PROXY=http://user:[email protected]:8080 \
python:3.13-slim \wget -O- https://httpbin.org/ipAltyapı:
Kimlik doğrulama hataları "407 Proxy Authentication Required" yanıtları olarak görünür. Başarılı kimlik doğrulama doğrudan hedef isteğe ilerler.
Ağ düzeyinde hata ayıklama için tcpdump, Docker ile proxy sunucunuz arasındaki gerçek paketleri yakalar.
Proxy’nize akan tüm trafiği görmek için tcpdump’ı çalıştırın:
# Capture proxy trafficsudo tcpdump -i any host proxy.company.com and port 8080Altyapı:
Bu ham paket yakalama, bağlantı girişimlerini, veri aktarımını ve bağlantı sonlandırmayı gösterir. TCP bağlantı kurulumu (SYN/ACK paketleri) ve ardından HTTP trafiğine bakın. Bağlantı zaman aşımları, yanıt gelmeyen yinelenen SYN paketleri olarak görünür.
DNS çözümleme testleri proxy karmaşasının yaygın bir kaynağını ortadan kaldırır.
Birçok proxy sorunu aslında kılık değiştirmiş DNS problemleridir. DNS çözümlemesini konteyner içinde test edin:
# Test DNS inside containers docker run --rm python:3.13-slim nslookup registry-1.docker.ioAltyapı:
Bu başarısız olursa, konteyner alan adlarını hiç çözemiyor demektir. Sorunu izole etmek için genel bir DNS sunucusu kullanmayı deneyin:
# Test with custom DNSdocker run --dns8.8.8.8 --rm python:3.13-slim nslookup registry-1.docker.ioAltyapı:
Kurumsal ortamlarda genellikle yalnızca ağ içinden çalışan DNS sunucuları bulunur. Proxy’niz, HTTP trafiğinin yanı sıra DNS isteklerini de ele almak zorunda olabilir veya konteynerleri proxy’nizle çalışan belirli DNS sunucularıyla yapılandırmanız gerekebilir.
Her katmanda sistematik şekilde ilerleyin; kök nedeni bulacaksınız.
Proxy’leri farklı şekilde ele alabilecek seçenekleri mi arıyorsunuz? 2025’teki mevcut konteynerleştirme araçlarının tamamını keşfetmek için Docker alternatifleri rehberimize göz atın.
Sonuç
Docker proxy yapılandırması yalnızca imaj indirtebilmekten ibaret değildir — aynı zamanda kurumsal ortamlarda güvenilir ve güvenli konteynerleştirilmiş uygulamalar inşa etmektir.
Dört farklı katmanda proxy ayarlarının nasıl yapılandırılacağını gösterdim: istemci işlemleri, daemon süreçleri, konteyner çalışma zamanı ve build zamanı işlemleri. Her katman, JSON dosyaları ve ortam değişkenlerinden paket yöneticisi ayarlarına ve BuildKit yapılandırmalarına kadar belirli bir amaca hizmet eder ve kendi yapılandırma yaklaşımını gerektirir. Katmanlı bir proxy stratejisi, tek hata noktalarına karşı sizi korur.
Docker, konteynerleştirme ve güvenlik konularına daha derinlemesine bakmak ister misiniz? Özenle seçtiğimiz kurs listesine göz atın:
Hırvatistan merkezli Kıdemli Veri Bilimci. 700’ün üzerinde yayımlanmış makaleyle 10 M+ görüntüleme elde eden, önde gelen bir teknoloji yazarı. TPOT ile Makine Öğrenimi Otomasyonu kitabının yazarı.
FAQs
Docker için neden proxy yapılandırmasına ihtiyaç duyuyorum?⌄
Kurumsal ağlar, internet trafiğini izlemek ve filtrelemek için proxy sunucuları kullanır; bu da Docker’ın Docker Hub gibi kayıt defterlerine doğrudan bağlantılarını engeller. Doğru proxy yapılandırması olmadan, imaj çekerken bağlantı zaman aşımlarına, paket kurarken başarısız build’lere ve harici servislere ulaşamayan konteynerlere rastlarsınız. Docker proxy ayarları bu bağlantıların tümünü kurumsal proxy sunucunuz üzerinden yönlendirerek güvenlik duvarlarının arkasında sorunsuz çalışmayı sağlar.
Docker daemon proxy ayarları ile istemci proxy ayarları arasındaki fark nedir?⌄
Docker daemon, imajları kayıt defterlerine çekme ve itme gibi işlemleri yönetirken; Docker istemcisi CLI komutlarını ve API çağrılarını yönetir. Farklı türde ağ istekleri yaptıkları için her birinin ayrı proxy yapılandırmasına ihtiyacı vardır. Bu yapılandırmalardan biri eksik olursa, bazı Docker işlemleri çalışırken bazıları bağlantı hatalarıyla başarısız olabilir.
Konteynerler proxy ayarlarını ana makineden otomatik olarak devralır mı?⌄
Hayır, konteynerler varsayılan olarak ana makinenizin proxy ayarlarını devralmaz. Konteynerleri başlatırken --env bayrakları, ortam dosyaları veya JSON yapılandırması kullanarak proxy ortam değişkenlerini açıkça geçirmeniz gerekir. Bu izolasyon sayesinde, farklı proxy ayarlarına sahip konteynerler çalıştırabilir veya belirli uygulamalar için proxy’leri tamamen atlayabilirsiniz.
İmaj çekme çalışırken Docker build neden başarısız oluyor?⌄
Docker build işlemlerinin, istemci yapılandırmanızdan izole şekilde çalıştığı için proxy ayarlarının build argümanları olarak iletilmesi gerekir. docker build çalıştırırken --build-arg HTTP_PROXY=... kullanın ve bu argümanları Dockerfile’ınızda ARG talimatlarıyla tanımlayın. Konteyner içindeki paket yöneticilerinin de bağımlılıkları indirmek için kendi proxy yapılandırma dosyalarına ihtiyacı vardır.
Eski builder’da olmayan BuildKit proxy sorunlarını nasıl gideririm?⌄
BuildKit, farklı bir proxy işleme yöntemi kullanır ve build bağlamlarını agresif biçimde önbelleğe alır; bu da bazen proxy değişikliklerini yok saymasına neden olur. Taze proxy algılamasını zorlamak için --no-cache ile build edin veya BuildKit’i tamamen devre dışı bırakmak için DOCKER_BUILDKIT=0 kullanın. Kalıcı sorunlarda, kayıt defteri aynası yapılandırmalarıyla /etc/buildkit/buildkitd.toml içinde BuildKit’e özgü proxy ayarlarını yapılandırın.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Docker'a giriş yapın ve veri uzmanlarının araç setinde Docker'ın önemini keşfedin. Docker konteynerleri, görüntüler ve daha fazlası hakkında bilgi edinin.
Çoğu kurumsal ağ, internet trafiğini izlemek ve filtrelemek için proxy sunucuları kullanır. Bu durum, Docker’ın kayıt defterlerinden imaj çekmeye çalıştığında engellere yol açar. Ev ağınızda çalışan işlemler, bağlantı zaman aşımlarına, kimlik doğrulama hatalarına ve başarısız build’lere dönüşebilir. Bu proxy kaynaklı sorunlar, ihtiyaç duydukları temel imajlara erişemeyen geliştirme ekiplerini sekteye uğratabilir.
Docker proxy yapılandırması, bu bağlantı sorunlarını çözer; önbellekleme sayesinde performansı artırır ve kurumsal güvenlik gereksinimlerini karşılar. Yapılandırma tamamlandığında, konteynerleriniz ağ kısıtlamalarından bağımsız olarak imajları çekebilir.
Bu eğitimde, Docker daemon proxy ayarlarını yapmayı, konteyner ortam değişkenlerini tanımlamayı ve Docker Compose içinde proxy yapılandırmasını ele almayı adım adım göstereceğim.
Docker’a yeni misiniz ve tüm ağ kavramları gözünüzü mü korkutuyor? Docker temelleriyle başlayın ve özgüveninizi adım adım geliştirin.
Docker Proxy Mimarisi Anlama
Docker ekosisteminin farklı bölümleri, farklı katmanlarda proxy yapılandırmasına ihtiyaç duyar.
Proxy’ler, Docker bileşenleriniz ile harici ağlar arasında aracı olarak davranır. Docker imaj çektiğinde, konteynerlerin internete erişmesi gerektiğinde ya da build’ler harici kaynaklara ihtiyaç duyduğunda, bu bağlantıları proxy sunucuları kontrol eder ve izler. Konteynerleştirilmiş uygulamalarınız ile dış dünya arasına oturur, istek ve yanıtları filtreler.
Kuruluşlar Docker ile proxy’leri performans, güvenlik ve uyumluluk için kullanır.
Performans, temel imajlar gibi sık erişilen kaynakların önbelleğe alınmasıyla gelir; bu da ekip genelinde indirme sürelerini azaltır. Güvenlik faydaları arasında trafik filtreleme, kötü amaçlı yazılım taraması ve yetkisiz sitelere erişimi engelleme bulunur. Uyumluluk gereksinimleri ise tüm ağ trafiğinin uygun erişim kontrolleri ve denetim izleriyle izlenen kanallardan geçmesini zorunlu kılar.
Docker proxy yapılandırması dört katmanda gerçekleşir:
İstemci proxy’si:
docker pullvedocker pushgibi Docker CLI komutlarını etkilerDaemon proxy’si: Docker daemon’ın harici kayıt defterlerine erişimini kontrol eder
Konteyner çalışma zamanı proxy’si: uygulamalar için konteyner içinde proxy değişkenlerini ayarlar
Build zamanı proxy’si: Dockerfile’ların internet erişimine ihtiyaç duyduğu
docker buildişlemleri sırasında proxy ayarlarını yönetirHer katman belirli bir amaca hizmet eder ve kendine özgü bir yapılandırma yaklaşımı gerektirir.
Docker ağlarını anlamak, konteynerlerin nasıl iletişim kurduğunu kavramakla başlar.
Docker’ı Bir Proxy ile Kullanacak Şekilde Yapılandırma
Docker’ın kurumsal proxy’nizle çalışması için hem Docker daemon’ı hem de istemciyi yapılandırmanız gerekir.
Neden? Çünkü farklı türde ağ isteklerini ele alırlar.
Daemon, imaj çekme/itme ve kayıt defteri kimlik doğrulamasını yönetirken, istemci CLI işlemlerini ve API çağrılarını yönetir. Her iki yapılandırmadan biri eksik olursa, Docker işlemlerinin bağlantı hatalarıyla başarısız olmasına yol açabilecek boşluklar oluşur.
Docker daemon nasıl yapılandırılır
Docker daemon, proxy ayarlarını
/etc/docker/daemon.jsondosyasından okur. Yoksa bu dosyayı oluşturun:noProxyalanı, proxy’yi atlaması gereken adresleri listeler. Buraya dahili kayıt defteri alan adlarınızı ve localhost adreslerini ekleyin.systemd servis geçersiz kılmaları (override) ayarlama
systemd tabanlı Linux sistemlerinde, Docker servisinin kendisini de proxy kullanacak şekilde yapılandırmanız gerekir. Geçersiz kılma dizinini ve yapılandırma dosyasını oluşturun:
Ardından, şu ortam değişkenlerini
http-proxy.confdosyasına ekleyin:Bu, Docker daemon sürecinin proxy üzerinden harici servislere ulaşabilmesini sağlar.
Docker, daemon yeniden başlatılana kadar proxy değişikliklerini almaz. systemd’yi yeniden yüklemek ve Docker’ı yeniden başlatmak için şu komutları çalıştırın:
Daemon’ın yeniden yüklenmesi, systemd’nin yeni servis yapılandırmasını okumasını sağlar; Docker’ın yeniden başlatılması ise
daemon.jsondeğişikliklerini uygular.Platforma özgü hususlar
Docker Desktop, proxy yapılandırmasını sunucu kurulumlarından farklı şekilde ele alır. Windows ve macOS’ta, Kaynaklar - Proxies bölümünden Docker Desktop arayüzünü kullanarak proxy ayarlarını yapın. Bu ayarlar, daemon ve istemciyi otomatik olarak yapılandırır.
Docker Engine kullanan Linux ana makineleri, yukarıda açıklanan manuel yapılandırmaya ihtiyaç duyar. Bazı dağıtımlar Docker’ı farklı paketler; sisteminizin
dockerd’ı doğrudan mı yoksa farklı bir servis yöneticisi aracılığıyla mı kullandığını kontrol edin.Yapılandırmanızı doğrulama
Basit bir pull komutuyla Docker’ın harici kayıt defterlerine ulaşabildiğini test edin:
Daemon’ın etkin yapılandırmasını da kontrol edebilirsiniz:
Bu çıktı, Docker’ın proxy ayarlarınızı algılayıp uygulayıp uygulamadığını gösterir.
Pull işlemleri hâlâ başarısızsa, Docker’ın istekleri doğru şekilde yönlendirdiğini doğrulamak için proxy sunucusu günlüklerinizi kontrol edin.
Ağ sorunlarıyla mı boğuşuyorsunuz? Docker portlarını doğru şekilde yayın ve bağlantı sıkıntılarından kaçının.
Proxy Ortam Değişkenlerini Ayarlama
Docker CLI komutlarının, daemon ayarlarından ayrı kendi proxy yapılandırmasına ihtiyacı vardır. Ortam değişkenleri, Docker istemcilerinin kurumsal proxy’ler üzerinden nasıl bağlandığını esnek biçimde kontrol etmenizi sağlar.
İstemci proxy’leri,
docker pull,docker pushvedocker logingibi Docker CLI işlemlerini kontrol eder. Bu komutları çalıştırdığınızda, Docker istemcisi kayıt defterlerine HTTP istekleri yapar ve hangi proxy sunucusunu kullanacağını bilmesi gerekir. İstemci proxy ayarları olmadan, daemon doğru yapılandırılmış olsa bile bu işlemler başarısız olur.JSON yapılandırma yöntemi
En temiz yaklaşım, Docker’ın
~/.docker/config.jsondosyasını kullanmaktır:Bu yöntem, proxy ayarlarını Docker’ın yapılandırması içinde tutar ve sisteminizdeki diğer uygulamaları etkilemez.
Ortam değişkeni alternatifi
Docker’ın otomatik olarak algılayacağı standart proxy ortam değişkenlerini şu komutlarla da ayarlayabilirsiniz:
Bu değişkenler yalnızca Docker için değil, proxy standartlarına uyan tüm uygulamalar için çalışır.
Genel (global) ve kullanıcı başına yapılandırma
Sistem genelinde yapılandırma için, ortam değişkenlerini
/etc/environmentiçine ekleyin veya/etc/profile.d/altında bir betik oluşturun:Kullanıcı başına yapılandırma için, kabuk profilinize (
~/.bashrc,~/.zshrc) ekleyin veya JSON yapılandırma yöntemini kullanın. Kullanıcı bazlı ayarlar, geliştiricilere farklı proxy’ler kullanma ya da test amaçlı tamamen atlama esnekliği sağlar.Güvenlik hususları
Kullanıcı adı ve parolaları hiçbir zaman yapılandırma dosyalarına veya ortam değişkenlerine düz metin olarak yazmamalısınız.
Düz metin proxy kimlik bilgileri, özellikle paylaşılan ortamlarda veya sürüm kontrol sistemlerinde güvenlik riski oluşturur.
Bunun yerine şu yaklaşımları kullanın:
Kimlik bilgilerini eklemek zorundaysanız,
http://username:[email protected]:8080biçimini kullanın; ancak bunları, izinleri kısıtlanmış korumalı dosyalarda saklayın.Build zamanı proxy yapılandırması
Docker build işlemleri, proxy ayarlarının build argümanlarıyla açıkça iletilmesini gerektirir:
Build argümanları, build bağlamı içinde ortam değişkenlerine dönüşür.
Bu sayede
RUNtalimatları paketleri ve bağımlılıkları proxy üzerinden indirebilir. Bu argümanlar olmadan, Dockerfile’lar yazılım kurmaya veya internetten kaynak çekmeye çalıştığında build işlemleri başarısız olur.Build zamanı proxy ayarları, Dockerfile’ınızda
ENVtalimatlarıyla açıkça ayarlamadığınız sürece nihai imajda kalıcı olmaz.Ortam değişkenleri, iş akışınıza uygun düzeyde proxy ayarlarını ele almanız için esneklik sağlar.
Build argümanları kafanızı mı karıştırıyor? Docker build argümanlarına gerçekten çalışan örneklerle hakim olun.
Konteyner ve Build Zamanı Proxy Enjeksiyonu
Sadece Docker istemcisini yapılandırmak yeterli değildir — konteynerlerinizin ve build’lerinizin kendi proxy ayarlarına ihtiyacı vardır. Bu bölümde, proxy yapılandırmasını çalışma zamanında ve build zamanında nasıl enjekte edeceğinizi göstereceğim.
Çalışma zamanı ortam değişkenleri
Konteynerler, ana makinenizin proxy ayarlarını devralmaz.
Konteynerleri başlatırken proxy değişkenlerini açıkça geçirmeniz gerekir. Tüm konteynerleri mi yoksa sadece belirli olanları mı yapılandırmak istediğinize bağlı olarak Docker size birden fazla yol sunar.
Tutarlı proxy ayarları için en temiz yaklaşım JSON yapılandırmasıdır — daha önce ele aldığımız gibi. Özetle,
~/.docker/config.jsondosyanıza bunu ekleyin:Docker bu değişkenleri başlattığınız her konteynere otomatik olarak enjekte eder. Ek bayraklara gerek yoktur.
CLI bayrakları, konteyner başına daha fazla kontrol sağlar:
Ayrıca bir ortam dosyasının tamamını da geçebilirsiniz:
Mevcut konteynerlere, başlatıldıktan sonra
docker execkullanarak proxy değişkenleri enjekte edebilirsiniz:Bu yaklaşım tek seferlik komutlar için işe yarar ancak konteyner yeniden başlatmalarında kalıcı olmaz.
Build zamanı proxy yapılandırması
Proxy ortamlarında, proxy ayarlarını açıkça iletmezseniz imaj build işlemleri başarısız olur.
Build argümanları, build sırasında proxy değişkenlerini enjekte etmenin standart yoludur:
Dockerfile’ınızın bunları kullanabilmesi için bu argümanları tanımlaması gerekir:
Dockerfile deklarasyonları, varsayılan proxy değerleri belirlemenizi sağlar:
ENVtalimatı, build’inizdeki sonraki tümRUNkomutlarında proxy değişkenlerini kullanılabilir kılar.BuildKit sınırlamalarının, daha yeni Docker sürümlerinde proxy sorunlarına yol açabileceğini bilmelisiniz. BuildKit, build bağlamlarını agresif biçimde önbelleğe alır ve bazen proxy değişikliklerini göz ardı eder.
BuildKit’in proxy güncellemelerini tanımasını zorlayabilirsiniz:
Ya da, proxy’ye duyarlı build’ler için BuildKit’i tamamen devre dışı bırakabilirsiniz:
Konu çok aşamalı (multi-stage) build’lere geldiğinde, tüm aşamalar boyunca tutarlı proxy yapılandırmasına ihtiyaç duyarlar:
Her aşama, build argümanlarını devralır; ancak önceki aşamalardaki ortam değişkenlerini devralmaz. İhtiyaç duyan her aşamada proxy değişkenlerini açıkça ayarlayın.
Kısacası — bir kez yapılandırın, her yerde enjekte edin.
Proxy etkin konteynerlerinizde ENTRYPOINT ve CMD arasındaki fark kafanızı mı karıştırıyor? Uygulamalı örneklerle eksiksiz açıklamayı alın.
Konteynerlerde Paket Yöneticilerini Proxy Kullanacak Şekilde Yapılandırma
Docker’ın proxy ayarları, konteynerlerinizin içindeki paket yöneticilerine otomatik olarak aktarılmaz. Kurumsal proxy üzerinden paket indirmek için her paket yöneticisini ayrı ayrı yapılandırmanız gerekir.
apt-get,yumveapkgibi paket yöneticileri, paket depolarına doğrudan HTTP bağlantıları kurar. Kısıtlı ağ ortamlarında, paket yöneticisi proxy sunucunuzdan haberdar değilse bu bağlantılar başarısız olur.Standart ortam değişkenleri yeterli değildir. Çoğu paket yöneticinin, sistem genelindeki proxy ayarlarını geçersiz kılan kendi yapılandırma dosyaları vardır.
Ubuntu/Debian: apt-get yapılandırması
apt-get’in paket kurulumu sırasında okuyacağı bir proxy yapılandırma dosyası oluşturun.Bunu Dockerfile’ınıza ekleyin:
/etc/apt/apt.conf.d/proxy.confdosyası,apt-get’e tüm paket indirmelerini proxy üzerinden yönlendirmesini söyler. Dosya, build’inizdekiRUNkomutları arasında kalıcıdır.Dahili depolar için proxy istisnaları da ayarlayabilirsiniz:
Alpine Linux: apk yapılandırması
Alpine, proxy ayarlarını
/etc/apk/repositoriesve ortam değişkenlerinden okuyanapkpaket yöneticisini kullanır.Alpine’in
apk’si, standart HTTP proxy ortam değişkenlerine uyar; dolayısıyla ayrı yapılandırma dosyalarına gerek yoktur. Yine de daha fazla kontrol için bir dosya oluşturabilirsiniz:CentOS/RHEL: yum yapılandırması
CentOS ve RHEL sistemleri, proxy ayarlarını
/etc/yum.confdosyasından okuyanyumveyadnfkullanır.dnfkullanan daha yeni CentOS sürümleri için şunu kullanın:Ayrıca şu komutla belirli alan adlarını proxy yönlendirmesinden hariç tutabilirsiniz:
Proxy işlevselliğini test etme
Öncelikle, paket yöneticinizin proxy üzerinden depolara ulaşabildiğini doğrulamanız gerekir.
Dockerfile’ınıza test komutları ekleyin:
--dry-runbayrağı, gerçekte hiçbir şey kurmadan paket çözümlemeyi test eder. Başarılı olursa, proxy yapılandırmanız çalışıyor demektir.Bağlantı sorunlarını hata ayıklamak için ayrıntılı çıktı ile de test edebilirsiniz:
Bu çıktı,
apt-get’in erişmeye çalıştığı URL’leri ve proxy bağlantılarının başarılı olup olmadığını tam olarak gösterir.Alpine testi için şunları kullanın:
Özetle, her paket yöneticisini ayrı ayrı yapılandırın; build’leriniz her proxy’nin arkasında çalışır.
Proxy ile ilgili build artifaktlarını temizlemek mi istiyorsunuz? Docker prune komutları alan açar ve sisteminizi temiz tutar.
Gelişmiş Proxy Uygulamaları
Temel HTTP proxy’leri başlangıç için yeterlidir; ancak üretim ortamları, kayıt defteri erişimi ve imaj önbelleklemesi üzerinde daha fazla kontrole ihtiyaç duyar. Daha iyi performans ve güvenilirlik için önbellekleyen proxy’ler ve kayıt defteri aynalarını nasıl kuracağınız aşağıda açıklanmıştır.
Önbellekleyen proxy kayıt defterleri
Aynı temel imajları tekrar tekrar çekmek bant genişliğini boşa harcar ve build’leri yavaşlatır.
Önbellekleyen proxy’ler, Docker istemcileriniz ile Docker Hub gibi harici kayıt defterleri arasına oturur. Sık erişilen imajları yerel olarak saklar; böylece sonraki pull işlemleri internet yerine iç ağınızdan gelir.
Kurumsal ortamlar için en popüler seçenek Harbor’dır:
harbor.ymldosyasını düzenleyerek Harbor’ı bir proxy önbelleği olarak yapılandırabilirsiniz:Daha basit bir önbellekleme alternatifi gerekirse Docker Registry Proxy kullanın. Şu şekilde:
Ardından, Docker istemcilerinizi önbellekleyen proxy’ye yönlendirin:
Önbellekleyen proxy’lerle elde edeceğiniz başlıca faydalar şunlardır:
Kayıt defteri aynaları ve BuildKit
Kayıt defteri aynaları, imaj pull’larını dahili ya da coğrafi olarak daha yakın kayıt defterlerine yönlendirmenizi sağlar.
Tek aynalı yapılandırma, tüm Docker Hub isteklerini bir ayna üzerinden geçirir:
Bunu
/etc/docker/daemon.jsondosyasına ekleyip Docker’ı yeniden başlatın. Tümdocker pullkomutları önce aynayı dener; ayna kullanılamazsa Docker Hub’a geri döner.Birden çok ayna yedeklilik sağlar:
Docker, başarıya ulaşana kadar aynaları sırayla dener.
BuildKit ayna kurulumu ayrı bir yapılandırma gerektirir; çünkü BuildKit bazı daemon ayarlarını atlar:
BuildKit’i özel yapılandırmayla başlatabilirsiniz:
Ya da BuildKit’in satır içi ayna yapılandırmasını kullanın:
Son olarak, Docker Hub’dan çeken bir imajı build ederek ayna kurulumunuzu test edin:
--progress=plainbayrağı, BuildKit’in gerçekte hangi kayıt defterine bağlandığını gösterir. Build çıktısında ayna URL’lerinizi görmelisiniz.Hepsi bu!
Karmaşık çoklu konteyner proxy kurulumlarını mı yönetiyorsunuz? Docker Compose ağ ve servis keşfini kolaylaştırır.
Güvenliği Sıkılaştırma
Proxy yapılandırmaları, dikkatli ele alınması gereken yeni saldırı olasılıkları açar. İşte Docker soket erişimini kilitlemenin ve proxy kimlik bilgilerini ifşadan korumanın yolları.
Docker soket proxy’si
Docker soketini doğrudan açığa çıkarmak büyük bir güvenlik riski yaratır.
Docker soketi (
/var/run/docker.sock), tüm ana sisteminize root düzeyinde erişim verir. Bu sokete yazabilen herhangi bir süreç, ana dosya sistemine erişimli konteynerler başlatabilir, ayrıcalık yükseltebilir veya konteyner izolasyonunu tamamen aşabilir.Doğrudan soket bağlama tehlikelidir:
Bu desen Docker-içinde-Docker kurulumlarında ve CI/CD hatlarında görülür, ancak güvenlik kabusudur. Tehlikeye atılmış bir konteyner tüm Docker daemon’ını kontrol edebilir.
Soket proxy servisleri daha güvenli bir ara katman oluşturur. Docker API çağrılarını filtreler ve konteynerlerin gerçekte neler yapabileceğini kısıtlar.
Tecnativa’nın docker-socket-proxy’sini kullanın:
Proxy yalnızca belirli Docker API uç noktalarını açığa çıkarır. İzin verilen işlemler için ortam değişkenlerini
1, engellenenler için0olarak ayarlayın.Uygulamalarınız ham soket yerine proxy’ye bağlanır:
Uymanız gereken ek soket sıkılaştırma stratejileri:
Kimlik bilgisi yönetimi
Düz metin URL’lerdeki proxy kimlik bilgileri her yerde görünür — günlüklerde, süreç listelerinde, ortam dökümlerinde.
Kimlik bilgilerini asla proxy URL’lerine gömmeyin:
ps auxya da ortam değişkeni dökümlerine erişimi olan herkes proxy parolanızı görebilir. Buna uygulama günlükleri, konteyner incelemesi ve sistem izleme araçları dahildir.Bunun yerine kimlik doğrulama dosyaları kullanın:
Proxy sunucunuzu dosyadan kimlik bilgisi okuyacak şekilde yapılandırın veya harici kimlik doğrulama sistemleri kullanın.
TLS proxy’ler, kimlik doğrulama el sıkışmaları dahil tüm proxy trafiğini şifreler:
Proxy sunucunuzu, bir CA’den alınmış veya istemci makinelere dağıtılmış self-signed uygun TLS sertifikalarıyla kurun.
Sertifika tabanlı kimlik doğrulama parolaları tamamen ortadan kaldırır:
Proxy, kullanıcı adı/parola kombinasyonları yerine istemci sertifikalarını doğrular. Sertifikalar tehlikeye atılırsa tekil olarak iptal edilebilir.
Kubernetes secret yönetimi, proxy kimlik bilgilerini konteyner imajlarının dışında tutar:
Sırlar (secrets) beklemede şifreli kalır ve imaj katmanlarında görünmeden çalışma zamanında enjekte edilir.
Soket erişimini kilitleyin ve kimlik bilgilerinizi şifreleyin — gelecekteki siz minnettar olacaktır.
Proxy kurulumunuz için Docker alternatiflerini mi düşünüyorsunuz? Doğru konteynerleştirme aracını seçmek için Docker ve Podman karşılaştırmasını inceleyin.
Yaygın Sorunları Giderme
Proxy sorunları, zaman aşımları, bağlantı hataları ve ağınızın dışında sorunsuz çalışan esrarengiz build hataları olarak kendini gösterir. En yaygın Docker proxy problemlerini teşhis ve onarmak için sistematik bir yaklaşım aşağıdadır.
Yapılandırılmış tanılama yaklaşımı
Temelden başlayın ve yığın boyunca yukarı doğru ilerleyin.
Adım 1: Ana makinadan proxy bağlantısını doğrulayın
Proxy sunucunuzun erişilebilir olup olmadığını test edin:
Bu başarısız olursa, proxy yapılandırmanızda veya ağ yönlendirmenizde sorun vardır. Docker’ı sorun gidermeden önce ağ ekibinizle iletişime geçin.
Adım 2: Docker daemon proxy ayarlarını kontrol edin
Daemon’ın proxy yapılandırmanızı okuyup okumadığını doğrulayın:
Proxy URL’lerinizin listelendiğini görmelisiniz. Eksikse,
/etc/docker/daemon.jsondosyasını kontrol edin ve Docker servislerini yeniden başlatın.Adım 3: Docker istemci işlemlerini test edin
Basit bir imaj çekmeyi deneyin:
Başarı, istemci proxy ayarlarınızın çalıştığını gösterir. Başarısızlık, daemon düzeyindeki proxy sorunlarına işaret eder.
Adım 4: Konteyner düzeyinde bağlantıyı test edin
Bir konteyner çalıştırın ve giden bağlantıları test edin:
Bu, sorunun Docker işlemlerinde mi yoksa konteyner ağında mı olduğunu izole eder.
Yaygın sorunlar ve çözümler
Sorun:
docker pullzaman aşımına uğruyorDocker harici kayıt defterlerine ulaşamadığında şu hatayı görebilirsiniz:
Sorunun nerede meydana geldiğini izole etmek için temel bağlantıyı test ederek başlayın:
Bunu, DNS ve proxy yapılandırma sorunlarını gidererek düzeltin:
/etc/docker/daemon.jsondosyasına DNS sunucuları ekleyinDahili DNS sunucuları için
NO_PROXYyapılandırınProxy’nizin HTTPS CONNECT yöntemini destekleyip desteklemediğini kontrol edin
Sorun: Build sırasında paket kurulumu başarısız
Konteyner içindeki paket yöneticileri depolara ulaşamaz ve şu gibi hatalar gösterir:
Geçici bir konteynerde doğrudan paket yöneticisi bağlantısını test edin:
Ayrıntılı çıktı, bağlantının tam olarak nerede başarısız olduğunu gösterir.
Bunu, paket yöneticilerini proxy kullanacak şekilde yapılandırarak çözün:
Sorun: BuildKit proxy ayarlarını yok sayıyor
BuildKit, eski builder’dan farklı proxy işleme kullanır ve şu gibi hatalara neden olabilir:
Builder yapılandırmanızı kontrol ederek sorunun BuildKit’e özgü olup olmadığını test edin:
Eski builder çalışıyorsa, BuildKit proxy yapılandırması sorununuz var demektir.
BuildKit proxy sorunlarını şu yaklaşımlarla giderin:
buildkitd.tomliçinde BuildKit’e özgü proxy ayarlarını yapılandırın--build-argile proxy değişkenlerini açıkça geçinSorun: Konteyner harici servislere ulaşamıyor
Konteyner içindeki uygulamanız harici API’lere bağlanmakta başarısız oluyor:
Bunu, konteynerin içinden bağlantıyı test ederek hata ayıklayın:
Bu, proxy değişkenlerinin mevcut olup olmadığını ve bağlantı girişiminin başarılı olup olmadığını gösterir.
Konteyner bağlantı sorunlarını, doğru proxy yapılandırmasını sağlayarak çözün:
Günlük analizi ve bağlantı testi
Docker daemon günlükleri proxy müzakereleri ve hataların tam hikâyesini ortaya koyar.
systemd tabanlı sistemlerde, Docker servis günlüklerini gerçek zamanlı izlemek için
journalctlkullanın:Geleneksel günlük dosyalarını kullanan sistemlerde, Docker günlüğünü doğrudan kontrol edin:
Günlüklerde proxy ile ilgili belirli kalıplara bakın. Bağlantı reddedildi hataları, proxy sunucusunun erişilebilir olmadığını gösterir. Kimlik doğrulama hataları, "407 Proxy Authentication Required" ile görünür. Zaman aşımı hataları ise ağ yönlendirme problemlerini veya proxy sunucusu aşırı yükünü düşündürür.
Konteyner düzeyinde test için curl ve wget, proxy davranışı hakkında ayrıntılı içgörü sağlar.
El sıkışma sırasında tam olarak ne olduğunu görmek için proxy üzerinden HTTP bağlantılarını test edin:
Ayrıntılı çıktı, DNS çözümlemesini, proxy bağlantısının kurulmasını ve gerçek HTTP istek akışını gösterir. Proxy tüneli doğru çalışıyorsa "Connected to proxy.company.com" ve ardından "CONNECT httpbin.org:80" gibi satırlar görürsünüz.
HTTPS bağlantıları, proxy’nizin CONNECT yöntemini desteklemesini gerektirir:
Çıktıda "CONNECT httpbin.org:443 HTTP/1.1" ifadesini arayın. "Method not allowed" vb. hatalar görürseniz, proxy’niz HTTPS tünellemeyi desteklemiyor demektir.
Kimlik doğrulamayı proxy URL’sine kimlik bilgilerini gömerek test edin:
Kimlik doğrulama hataları "407 Proxy Authentication Required" yanıtları olarak görünür. Başarılı kimlik doğrulama doğrudan hedef isteğe ilerler.
Ağ düzeyinde hata ayıklama için tcpdump, Docker ile proxy sunucunuz arasındaki gerçek paketleri yakalar.
Proxy’nize akan tüm trafiği görmek için tcpdump’ı çalıştırın:
Bu ham paket yakalama, bağlantı girişimlerini, veri aktarımını ve bağlantı sonlandırmayı gösterir. TCP bağlantı kurulumu (SYN/ACK paketleri) ve ardından HTTP trafiğine bakın. Bağlantı zaman aşımları, yanıt gelmeyen yinelenen SYN paketleri olarak görünür.
DNS çözümleme testleri proxy karmaşasının yaygın bir kaynağını ortadan kaldırır.
Birçok proxy sorunu aslında kılık değiştirmiş DNS problemleridir. DNS çözümlemesini konteyner içinde test edin:
Bu başarısız olursa, konteyner alan adlarını hiç çözemiyor demektir. Sorunu izole etmek için genel bir DNS sunucusu kullanmayı deneyin:
Kurumsal ortamlarda genellikle yalnızca ağ içinden çalışan DNS sunucuları bulunur. Proxy’niz, HTTP trafiğinin yanı sıra DNS isteklerini de ele almak zorunda olabilir veya konteynerleri proxy’nizle çalışan belirli DNS sunucularıyla yapılandırmanız gerekebilir.
Her katmanda sistematik şekilde ilerleyin; kök nedeni bulacaksınız.
Proxy’leri farklı şekilde ele alabilecek seçenekleri mi arıyorsunuz? 2025’teki mevcut konteynerleştirme araçlarının tamamını keşfetmek için Docker alternatifleri rehberimize göz atın.
Sonuç
Docker proxy yapılandırması yalnızca imaj indirtebilmekten ibaret değildir — aynı zamanda kurumsal ortamlarda güvenilir ve güvenli konteynerleştirilmiş uygulamalar inşa etmektir.
Dört farklı katmanda proxy ayarlarının nasıl yapılandırılacağını gösterdim: istemci işlemleri, daemon süreçleri, konteyner çalışma zamanı ve build zamanı işlemleri. Her katman, JSON dosyaları ve ortam değişkenlerinden paket yöneticisi ayarlarına ve BuildKit yapılandırmalarına kadar belirli bir amaca hizmet eder ve kendi yapılandırma yaklaşımını gerektirir. Katmanlı bir proxy stratejisi, tek hata noktalarına karşı sizi korur.
Docker, konteynerleştirme ve güvenlik konularına daha derinlemesine bakmak ister misiniz? Özenle seçtiğimiz kurs listesine göz atın: