Docker: Proxmox LXC İçinde 'net.ipv4.ip_unprivileged_port_start' Nedeniyle Oluşan 'Permission Denied' Hatasının Giderilmesi

Proxmox üzerinde bir LXC konteyneri içinde çalışan Docker'da, düşük portlara erişim denemelerinde karşılaşılan 'permission denied' hatasını çözmek için gerekli sysctl ayarlarını nasıl yapılandıracağınızı adım adım anlatır.

I
IT-RD
18 görüntülenme
Docker: Proxmox LXC İçinde 'net.ipv4.ip_unprivileged_port_start' Nedeniyle Oluşan 'Permission Denied' Hatasının Giderilmesi

Giriş

Bu makale, Proxmox Sanal Ortamında bir Linux Konteyneri (LXC) içinde çalışan Docker motorunda karşılaşılan yaygın bir izin reddi hatasını çözmeye odaklanmaktadır. Özellikle, Docker konteynerleri düşük numaralı (genellikle 1024 altındaki) portlara bağlanmaya çalıştığında, işletim sistemi çekirdek parametresi olan net.ipv4.ip_unprivileged_port_start ile ilgili bir kısıtlama nedeniyle bu hata ortaya çıkar.

Sorunun Tanımı

Docker konteynerlerini başlattığınızda, özellikle düşük numaralı portları (örneğin 80, 443) ana makineye bağlamak (port mapping) istediğinizde aşağıdaki gibi bir hata alabilirsiniz:

Error response from daemon: failed to create task for container: failed to set parameters for task: operation not permitted: net.ipv4.ip_unprivileged_port_start must be greater than 1024 to allow non-root containers to bind to unprivileged ports.

Bu hata, Docker'ın varsayılan olarak root olmayan kullanıcılar veya süreçler için düşük portlara bağlanma yetkisini kısıtlamasından kaynaklanır. Proxmox LXC ortamlarında, bu kısıtlama bazen daha belirgin hale gelebilir çünkü LXC'ler, tam sanal makinelerin aksine, ana sistem çekirdeğini paylaşır ve sıkı güvenlik politikalarına tabi olabilir.

Not: Proxmox sürüm 9.1.1 ve sonrası bu sorunu dahili olarak çözmüş olabilir. Eğer en son sürümleri kullanıyorsanız, bu adımları uygulamadan önce sürümünüzü kontrol edin.

Çözüm Adımları: sysctl Parametresini Ayarlama

Sorunu çözmek için, LXC konteynerinin (veya ana Proxmox hostunun, LXC yapılandırmasına bağlı olarak) çekirdek parametresini, Docker'ın düşük portlara erişmesine izin verecek şekilde ayarlamamız gerekmektedir. Bu işlem, net.ipv4.ip_unprivileged_port_start değerini 1024'ten daha küçük bir değere (genellikle 0) ayarlamayı içerir.

Adım 1: LXC İçinde sysctl Ayar Dosyasını Düzenleme

Bu ayarın kalıcı olması için, LXC konteynerinizin kök dosya sisteminde bir .conf dosyası oluşturmalıyız. Bu dosya, sistem başlangıcında ilgili parametreyi ayarlayacaktır.

  1. LXC konteynerinize SSH ile bağlanın veya konsol erişimi sağlayın.
  2. /etc/sysctl.d/ dizini altında yeni bir yapılandırma dosyası oluşturun (örneğin 99-docker-ports.conf).
sudo nano /etc/sysctl.d/99-docker-ports.conf

Adım 2: Parametreyi Ekleme

Oluşturduğunuz dosyaya, Docker'ın düşük portlara bağlanmasına izin verecek satırı ekleyin:

net.ipv4.ip_unprivileged_port_start = 0

Adım 3: Ayarları Uygulama ve Kontrol Etme

Yapılandırma dosyasını kaydettikten sonra, ayarların hemen yürürlüğe girmesi için sysctl komutunu kullanın:

sudo sysctl -p /etc/sysctl.d/99-docker-ports.conf

Ayarların doğru uygulanıp uygulanmadığını kontrol edin:

sysctl net.ipv4.ip_unprivileged_port_start

Çıktı net.ipv4.ip_unprivileged_port_start = 0 olmalıdır.

Önemli Güvenlik Uyarısı

net.ipv4.ip_unprivileged_port_start değerini 0 olarak ayarlamak, konteynerlerin root olmayan kullanıcılar tarafından bile 1024 altındaki tüm portlara bağlanmasına izin verir. Bu, potansiyel bir güvenlik riskini artırabilir. Bu değişikliği yalnızca güvenilir uygulamaların çalıştığı ve güvenlik gereksinimlerinizin izin verdiği durumlarda yapmalısınız. Alternatif olarak, Docker'ı yalnızca root kullanıcısı olarak çalıştırmayı düşünebilirsiniz, ancak bu da genel olarak önerilen bir uygulama değildir.

Sonuç

Bu adımları tamamladıktan sonra, Docker servisini yeniden başlatmanız gerekebilir (ancak genellikle sysctl -p yeterlidir). Artık Docker konteynerleriniz, düşük numaralı portları ana makineye başarıyla bağlayabilecektir.

Kaynak

IT-RD