2014-06-20 9 views
29

है मैं डोकर कंटेनर मैं (https://github.com/phusion/baseimage-docker)/डोकर कंटेनर पर फ़ाइल वर्णनकर्ता ulimit स्थापित करने के लिए कैसे छवि टैग Phusion/baseimage-डोकर

पहले से ही ssh के साथ कंटेनर से कनेक्ट पर सही ढंग से फ़ाइल वर्णनकर्ता सीमा निर्धारित करने की जरूरत है की कोशिश की:

  • संपादित कंटेनर limits.conf इस फाइल
  • नवोदय प्रक्रिया https://coderwall.com/p/myodcq में पाया उपेक्षा लेकिन इस डोकर छवि init प्रक्रिया के विभिन्न प्रकार है। (RUNIT)
  • मैं PAM पुस्तकालय के विन्यास /etc/pam.d में
  • कोशिश सक्षम PAM को ssh के लिए sshd_config

में उत्पादन यह हमेशा एक ही संशोधित करने की कोशिश की।

bash: ulimit: open files: cannot modify limit: Operation not permitted 

उत्तर

24

कुछ खोज मैं एक Google समूह चर्चा पर इस पाया करने के बाद:

डोकर वर्तमान में बढ़ाया सुरक्षा के लिए इस क्षमता को रोकता है।

ऐसा इसलिए है क्योंकि होस्ट सिस्टम की उलटी सेटिंग्स डॉकर कंटेनर पर लागू होती है। इसे सुरक्षा जोखिम के रूप में माना जाता है कि एक कंटेनर में चल रहे प्रोग्राम मेजबान के लिए ulimit सेटिंग्स बदल सकते हैं।

अच्छी खबर यह है कि आपके पास से चुनने के लिए दो अलग-अलग समाधान हैं।

  1. sys_resourcelxc_template.go से हटाएं और डॉकर को पुन: संकलित करें। फिर आप जितनी चाहें उतनी ऊंची ऊंचाई को सेट करने में सक्षम होंगे।

या

  1. बंद करो डोकर दानव। मेजबान पर ulimit सेटिंग्स बदलें। डॉकर राक्षस शुरू करें। अब इसमें आपकी संशोधित सीमाएं हैं, और इसके बच्चे प्रक्रियाएं भी हैं।

मैं लागू किया दूसरी विधि:

  1. sudo service docker stop;

  2. /etc/security/limits.conf

  3. रिबूट मशीन में सीमा बदल

  4. मेरा रन कंटेनर

  5. कंटेनर में खुली फाइल सीमा की पुष्टि करने के लिए ulimit -a चलाया गया है।

देखें: https://groups.google.com/forum/#!searchin/docker-user/limits/docker-user/T45Kc9vD804/v8J_N4gLbacJ

+1

इसके अलावा बदलने के बारे में एक उपयोगी ट्यूटोरियल है '/ etc/https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Tuning_and_Optimizing_Red_Hat_Enterprise_Linux_for_Oracle_9i_and_10g_Databases/chap-Oracle_9i_and_10g_Tuning_Guide-Setting_Shell_Limits_for_the_Oracle_User.html –

+0

में सुरक्षा/limits.conf' तुम जानते हो क्यों यह एक रिबूट की आवश्यकता है? शेल को फिर से शुरू क्यों न करें? – CMCDragonkai

4

वास्तव में, मैं ऊपर जवाब की कोशिश की है, लेकिन यह काम करने के लिए नहीं मालूम था।

मेरी कंटेनर ulimit परिवर्तन स्वीकार करने के लिए प्राप्त करने के लिए, मैं उन्हें शुरू करने से पहले docker.conf फ़ाइल को अद्यतन करने के लिए किया था:

$ sudo service docker stop 
$ sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf" 
$ sudo service docker start 
+0

रीबूट के बाद मशीन आने पर ये परिवर्तन प्रबल नहीं होते हैं, लेकिन मशीन आने के बाद हम डॉकर की सेवाओं को पुनरारंभ करते हैं तो कंटेनर आवश्यक कॉन्फ़िगरेशन लेता है। –

2

यहाँ मैं क्या किया है।

/etc/init.d/docker

फ़ाइल में सेट ulimit -n 32000 और सत्यापित करने के लिए डोकर सेवा

docker run -ti node:latest /bin/bash

रन इस आदेश को पुनः आरंभ

[email protected]:/# ulimit -a

इसे आर में देखना चाहिए esult

open files (-n) 32000

[[email protected] ec2-user]# docker run -ti node /bin/bash 
[email protected]:/# ulimit -a 
core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 58729 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 32000 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 10240 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 58729 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 
0

boot2docker के लिए, हम यह /var/lib/boot2docker/profile पर सेट कर सकते हैं, उदाहरण के लिए:

ulimit -n 2018

बहुत अधिक इस सीमा निर्धारित नहीं के रूप में यह धीमी हो जाएगी चेतावनी दी हो नीचे उतरो! बग #1332440 देखें। मैं इसे डेबियन जेसी के साथ था।

26

नवीनतम डॉकर कमांड लाइन और एपीआई के माध्यम से ulimits सेट करने का समर्थन करता है। उदाहरण के लिए, docker run--ulimit <type>=<soft>:<hard> लेता है और इनमें से जितने चाहें उतने हो सकते हैं। तो, आपके नाखून के लिए, एक उदाहरण --ulimit nofile=262144:262144

+9

क्या इसका मतलब यह है कि विशिष्ट कंटेनर दूसरों की तुलना में अधिक उलझन में है? क्या मेजबान मशीन का उलटा अपरिवर्तित रहता है? – garbagecollector

+1

@garbagecollector हां, इसका मतलब है कि विशिष्ट कंटेनर दूसरों की तुलना में अधिक उलझन में है। ऐसा इसलिए है क्योंकि यदि ** - ulimit ** ** डॉकर रन ** कमांड में निर्दिष्ट नहीं है, तो कंटेनर को डॉकर डिमन से डिफ़ॉल्ट ulimit प्राप्त होता है। और साथ ही, मेजबान मशीन का उलझन पूरी तरह अपरिवर्तित रहता है। –

+1

@SuhasChikkanna बस यह सुनिश्चित करने के लिए, यदि कंटेनर अधिकतम "खुली फ़ाइलें" सीमा रेखांकित मेजबान अधिकतम "खुली फ़ाइलें" से अधिक है, तो कंटेनर सीमा को केवल अनदेखा कर दिया जाएगा? –

6

मैंने कई विकल्पों का प्रयास किया है और यह सुनिश्चित नहीं किया है कि कुछ समाधान एक मशीन पर काम से ऊपर क्यों सुझाए गए हैं, न कि दूसरों पर।

एक समाधान है कि काम करता है और है कि सरल है और प्रति कंटेनर काम कर सकते हैं है:

docker run --ulimit memlock=819200000:819200000 -h <docker_host_name> --name=current -v /home/user_home:/user_home -i -d -t docker_user_name/image_name 
0

docker run आदेश एक --ulimit झंडा तो आप इस ध्वज का उपयोग कर सकते अपने डोकर कंटेनर में फ़ाइल खोलने सीमा निर्धारित करने की है।

खुली फ़ाइल सीमा सेट करने के लिए अपने कंटेनर को कताई करते समय निम्न आदेश चलाएं।

docker run --ulimit nofile=<softlimit>:<hardlimit> कॉलन से पहले पहला मान सॉफ्ट फ़ाइल सीमा इंगित करता है और कॉलन के बाद मान हार्ड फ़ाइल सीमा इंगित करता है।आप इंटरैक्टिव मोड में अपने कंटेनर चल रहा है और अपने कंटेनर में निम्न आदेश को क्रियान्वित करने शैल ulimit -n

पुनश्च कर इसकी पुष्टि कर सकते हैं: और अधिक स्पष्टता के लिए इस blog पद की जाँच

संबंधित मुद्दे