/var/lib/docker
जैसा कि मैं बता सकता हूं, जैसे ही वे खींचे जाते हैं , डॉक चित्र स्थापित होते हैं। क्या इस स्थान को बदलने का कोई तरीका है, जैसे माउंटेड वॉल्यूम जैसे /mnt
?
/var/lib/docker
जैसा कि मैं बता सकता हूं, जैसे ही वे खींचे जाते हैं , डॉक चित्र स्थापित होते हैं। क्या इस स्थान को बदलने का कोई तरीका है, जैसे माउंटेड वॉल्यूम जैसे /mnt
?
जवाबों:
डॉकर के हालिया संस्करणों के साथ, आप data-root
पैरामीटर का मान अपने कस्टम पथ में, /etc/docker/daemon.json
( https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration/file के अनुसार ) सेट करेंगे।
पुराने संस्करणों के साथ, आप -g
डॉकर डेमन शुरू करते समय विकल्प का उपयोग करके डॉकर्स के स्टोरेज बेस डायरेक्टरी (जहां कंटेनर और इमेजेज जाते हैं) को बदल सकते हैं । (check docker --help
) करें। आपके पास यह सेटिंग स्वचालित रूप से लागू हो सकती है जब डॉकर इसे / etc / default / docker में जोड़कर शुरू होता है
-g
कि उपस्टार्ट फ़ाइल को संशोधित करने के बजाय / etc / defaults / docker में इस विकल्प को जोड़ें , इसका उत्तर देखें।
DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
graph
Daemon.json में विशेषता v17.05.0 के रूप में हटा दिया गया है, का उपयोग data-root
करने के बजाय, cf stackoverflow.com/a/50217666/743507
टिप्पणियों से सलाह के बाद मैं इस उत्तर को बेहतर बनाने के लिए डॉकर सिस्टमड प्रलेखन का उपयोग करता हूं । नीचे की प्रक्रिया में रिबूट की आवश्यकता नहीं होती है और यह बहुत अधिक साफ होता है।
पहले कस्टम कॉन्फ़िगरेशन के लिए निर्देशिका और फ़ाइल बनाएँ:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
17.06-CE पेस्ट से पहले डॉक वर्जन के लिए :
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"
17.06-CE पेस्ट के बाद docker के लिए :
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"
daemon.json
मैंने हाल ही में फेडोरा 25 पर 17.09-सीई के साथ उपरोक्त प्रक्रिया की कोशिश की और यह काम नहीं करता है। /etc/docker/daemon.json
चाल में उस सरल संशोधन के बजाय :
{
"graph": "/mnt",
"storage-driver": "overlay"
}
विधि के बावजूद आपको कॉन्फ़िगरेशन को फिर से लोड करना होगा और डॉकर को पुनरारंभ करना होगा:
sudo systemctl daemon-reload
sudo systemctl restart docker
यह पुष्टि करने के लिए कि डॉकर को फिर से जोड़ा गया था:
docker info|grep "loop file"
हाल के संस्करण (17.03) में अलग-अलग कमांड की आवश्यकता है:
docker info|grep "Docker Root Dir"
आउटपुट इस तरह दिखना चाहिए:
Data loop file: /mnt/devicemapper/devicemapper/data
Metadata loop file: /mnt/devicemapper/devicemapper/metadata
या:
Docker Root Dir: /mnt
तब आप पुराने डॉकरों के भंडारण को सुरक्षित रूप से हटा सकते हैं:
rm -rf /var/lib/docker
docker info
बयान शायद पुरानी है। Ubuntu 16.04 पर, पुन: कॉन्फ़िगर किए गए के लिए चेक है sudo docker info | grep "Docker Root Dir"
। अन्यथा, अच्छा जवाब, स्वीकार किया जाना चाहिए;)
Docker Root Dir: /"/mnt"
जब आप चलाता है docker info|grep "Docker Root Dir"
, तो आप को बदलने के लिए --data-root="/mnt"
में --data-root=/mnt
फाइल के अंदरdocker-storage.conf
नई डोकर संस्करणों हम उपयोग करने की आवश्यकता है के लिए data-root
के रूप में graph
: v17.05.0 में पदावनत किया गया है आधिकारिक पदावनत डॉक्स
संपादित करें /etc/docker/daemon.json
(यदि यह मौजूद नहीं है, तो इसे बनाएं) और शामिल करें:
{
"data-root": "/new/path/to/docker-data"
}
इसके बाद डॉकर को पुनः आरंभ करें:
sudo systemctl daemon-reload
sudo systemctl restart docker
चूंकि मुझे फेडोरा (EDIT) में ऐसा करने के लिए सही निर्देश नहीं मिला है: लोगों ने टिप्पणियों में बताया कि यह CentOS और Suse पर भी काम करना चाहिए) (/ etc / default / docker का उपयोग वहाँ नहीं किया जाता है), मैं अपना जोड़ रहा हूँ यहाँ उत्तर दें:
आपको / etc / sysconfig / docker को संपादित करना होगा , और विकल्प चर में -g विकल्प जोड़ना होगा। यदि एक से अधिक विकल्प हैं, तो सुनिश्चित करें कि आप उन्हें "" में संलग्न करेंगे। मेरे मामले में, वह फ़ाइल समाहित थी:
OPTIONS=--selinux-enabled
तो यह बन जाएगा
OPTIONS="--selinux-enabled -g /mnt"
पुनरारंभ ( systemctl restart docker
) के बाद , डॉकर को नई निर्देशिका का उपयोग करना चाहिए
डॉक फ़ोल्डर को / mnt (उदाहरण के लिए) ले जाने के लिए एक प्रतीकात्मक लिंक का उपयोग न करें। यह docker rm कमांड से परेशानी का कारण बन सकता है ।
डॉकटर के लिए -g विकल्प का बेहतर उपयोग करें। उबंटू पर आप इसे स्थायी रूप से /etc/default/docker.io में सेट कर सकते हैं। DOCKER_OPTS लाइन को बढ़ाएँ या बदलें।
यहाँ एक उदाहरण: `DOCKER_OPTS =" - g / mnt / कहीं / / / docker / "
docker rm
सीलिंक का उपयोग करते समय मुझे किस तरह की परेशानी की उम्मीद है ?
Ubuntu 16.04
stackoverflow.com/a/30219552/977622 इसे काम पर लाने के लिए
कर्ता सेवा बंद करो
sudo systemctl stop docker
मौजूदा डॉक निर्देशिका को नए स्थान पर ले जाएं
sudo mv /var/lib/docker/ /path/to/new/docker/
प्रतीकात्मक लिंक बनाएँ
sudo ln -s /path/to/new/docker/ /var/lib/docker
Docker सेवा प्रारंभ करें
sudo systemctl start docker
sudo ln -s /path/to/new/docker/ /var/lib/docker
यह समाधान Red Hat 7.2 और Docker 1.12.0 पर काम करता है
अपने पाठ संपादक में फ़ाइल /lib/systemd/system/docker.service संपादित करें ।
add -g / path / to / docker / ExecStart निर्देश के अंत में । पूरी लाइन इस तरह दिखनी चाहिए।
ExecStart=/usr/bin/dockerd -g /path/to/docker/
नीचे दिए गए आदेश को निष्पादित करें
systemctl daemon-reload
systemctl restart docker
Docker निर्देशिका की जाँच करने के लिए कमांड निष्पादित करें
docker info | grep "loop file\|Dir"
यदि आपके पास Red Hat में डू / फाइल / sysconfig / docker फाइल है या 1.7.1 इस उत्तर को जांचें ।
विजेता उत्तर की कॉपी-और-पेस्ट संस्करण :)
केवल इस सामग्री के साथ यह फ़ाइल बनाएं:
$ सुडो vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
डॉकटर Ubuntu 16.04.2 LTS
में परीक्षण किया गया1.12.6
graph
Daemon.json में विशेषता v17.05.0 के रूप में हटा दिया गया है, का उपयोग data-root
करने के बजाय, cf stackoverflow.com/a/50217666/743507
डेबियन / उबंटू या फेडोरा के लिए, आप शायद अन्य उत्तरों का उपयोग कर सकते हैं। लेकिन अगर आपके पास /etc/default/docker
या उसके नीचे फाइलें नहीं हैं /etc/sysconfig/docker
, और आपका सिस्टम सिस्टमड चल रहा है, तो आप h3nrik द्वारा इस उत्तर का पालन करना चाह सकते हैं । मैं आर्क का उपयोग कर रहा हूं, और यह मेरे लिए काम करता है।
मूल रूप से, आपको नए डॉकटर छवि स्थान को पर्यावरण चर के रूप में पढ़ने के लिए सिस्टमड को कॉन्फ़िगर करने की आवश्यकता है, और उस पर्यावरण चर को डॉकर डेमन निष्पादन स्क्रिप्ट में पास करें।
पूर्णता के लिए, यहाँ h3nrick का उत्तर है:
क्या आपके पास कोई /lib/systemd/system/docker.service
फाइल है?
यदि हां, तो इसे संपादित करें ताकि डॉकर सेवा सामान्य /etc/default/docker
रूप से पर्यावरण फ़ाइल का उपयोग करे:EnvironmentFile=-/etc/default/docker
:।
में /etc/default/docker
फ़ाइल तो जोड़ने DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"
।
अंत में बस a systemctl daemon-reload && systemctl restart docker
।
अधिक जानकारी के लिए कृपया दस्तावेज़ पर भी नज़र डालें ।
एक सरल उपाय यह है कि आप जो भी चाहते हैं, उसके लिए एक सॉफ्ट लिंक पॉइंट बनाएं
link -s /var/lib/docker /mnt/whatever
यह मेरे लिए मेरे CentOS 6.5 सर्वर पर काम करता है।
जैसा कि @mbarthelemy द्वारा सुझाया गया है, यह -g
विकल्प के माध्यम से किया जा सकता है जब सीधे डॉकर डेमन शुरू करते हैं।
हालाँकि, यदि docker को सिस्टम सेवा के रूप में शुरू किया जा रहा है, तो /etc/default/docker
फ़ाइल को संशोधित करने की अनुशंसा नहीं की जाती है । यहां स्थित इस के लिए एक दिशानिर्देश है ।
सही दृष्टिकोण /etc/docker/daemon.json
लिनक्स (या मैक) सिस्टम या %programdata%\docker\config\daemon.json
विंडोज पर एक फ़ाइल बनाना है । यदि इस फ़ाइल का उपयोग किसी और चीज़ के लिए नहीं किया जा रहा है, तो निम्नलिखित फ़ील्ड को पर्याप्त होना चाहिए:
{
"graph": "/docker/daemon_files"
}
यह उस नए स्थान को मान रहा है जहाँ आप चाहते हैं कि डॉकटर अपना डेटा बनाए रखे /docker/daemon_files
OpenSUSE लीप पर 42.1
$cat /etc/sysconfig/docker
## Path : System/Management
## Description : Extra cli switches for docker daemon
## Type : string
## Default : ""
## ServiceRestart : docker
#
DOCKER_OPTS="-g /media/data/installed/docker"
ध्यान दें कि DOCKER_OPTS शुरू में खाली था और मैंने जो भी किया था वह इस तर्क में जोड़ा गया था कि docker को मेरी नई निर्देशिका का उपयोग करना है
फेडोरा 26 और शायद कई अन्य संस्करणों पर, ऊपर वर्णित के रूप में आप अपने आधार फ़ोल्डर स्थान को स्थानांतरित करने के बाद एक त्रुटि का सामना कर सकते हैं। यह विशेष रूप से सच है यदि आप इसे कहीं / घर के नीचे स्थानांतरित कर रहे हैं। इसका कारण यह है कि SeLinux में किक करता है और डॉकटर कंटेनर को इस स्थान के नीचे से अपने कई कार्यक्रम चलाने से रोकता है।
जब आप -g पैरामीटर जोड़ते हैं, तो लघु समाधान --enable-selinux विकल्प को हटाने के लिए होता है।
AWS उबंटू 16.04 सर्वर पर मैंने डॉकरों की छवियों को एक अलग ईबीएस पर रखा, जो कि डॉक के तहत / घर / ubuntu / kaggle / पर मुहिम शुरू की
मेरी इनिशियलाइज़ेशन स्क्रिप्ट के इस स्निपेट ने सही तरीके से काम किया
# where are the images initially stored?
sudo docker info | grep "Root Dir"
# ... not where I want them
# modify the configuration files to change to image location
# NOTE this generates an error
# WARNING: Usage of loopback devices is strongly discouraged for production use.
# Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
# see /programming/31620825/
# warning-of-usage-of-loopback-devices-is-strongly-discouraged-for-production-use
sudo sed -i ' s@#DOCKER_OPTS=.*@DOCKER_OPTS="-g /home/ubuntu/kaggle/docker"@ ' /etc/default/docker
sudo chmod -R ugo+rw /lib/systemd/system/docker.service
sudo cp /lib/systemd/system/docker.service /etc/systemd/system/
sudo chmod -R ugo+rw /etc/systemd/system/
sudo sed -i ' s@ExecStart.*@ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://@ ' /etc/systemd/system/docker.service
sudo sed -i '/ExecStart/a EnvironmentFile=-/etc/default/docker' /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info | grep "Root Dir"
# now they're where I want them
17.06.0-ce-mac19 संस्करण में मैक उपयोगकर्ताओं के लिए आप वरीयताएँ विकल्प में उपयोगकर्ता इंटरफ़ेस से बस डिस्क छवि स्थान को स्थानांतरित कर सकते हैं बस डिस्क छवि के स्थान को बदल दें और यह काम करेगा ( डिस्क को स्थानांतरित करें छवि पर क्लिक करके ) और पुनरारंभ करें कर्ता। इस दृष्टिकोण का उपयोग करते हुए मैं डॉकटर छवियों को संग्रहीत करने के लिए अपने बाहरी हार्डिस्क का उपयोग करने में सक्षम था।