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.
- LXC konteynerinize SSH ile bağlanın veya konsol erişimi sağlayın.
/etc/sysctl.d/dizini altında yeni bir yapılandırma dosyası oluşturun (örneğin99-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_startdeğ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.



