ডকার চিত্র ইনস্টলেশন ডিরেক্টরি কীভাবে পরিবর্তন করবেন?


182

আমি যা বলতে পারি তা থেকে, ডকারের চিত্রগুলি /var/lib/dockerটানা যাওয়ার সাথে সাথে ইনস্টল করা হয়। মাউন্ট ভলিউমের মতো এই অবস্থান পরিবর্তন করার কোনও উপায় আছে কি /mnt?


3
আপনার ডকার কোন অপারেটিং সিস্টেমে চলছে?
থমাসলেভিল

উত্তর:


135

ডকারের সাম্প্রতিক সংস্করণগুলির সাথে, আপনি data-rootপ্যারামিটারটির মানটি আপনার কাস্টম পাথটিতে সেট করবেন /etc/docker/daemon.json ( https://docs.docker.com/engine/references/commandline/dockerd/#daemon-configration-file অনুযায়ী )।

পুরানো সংস্করণগুলির সাহায্যে -gডকার ডিমন শুরু করার সময় আপনি বিকল্পটির সাহায্যে ডকারের স্টোরেজ বেস ডিরেক্টরি (যেখানে ধারক এবং চিত্রগুলি যান) পরিবর্তন করতে পারেন । (চেক docker --help) ডকার যখন / ইত্যাদি / ডিফল্ট / ডকারে যুক্ত করে শুরু করেন তখন আপনি এই সেটিংসটি স্বয়ংক্রিয়ভাবে প্রয়োগ করতে পারেন


4
আমি মনে করি সর্বোত্তম সমাধান হ'ল এই -gবিকল্পটি / ইত্যাদি / ডিফল্ট / ডকারে আপস্টার্ট ফাইলটি পরিবর্তনের পরিবর্তে যুক্ত করা, আমার উত্তরটি দেখুন।
এমবার্থলেমি

9
হ্যাঁ, এই লাইনটিDOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
mbarthelemy

6
ফেডোরায় কাজ করে না। আমার উত্তর দেখুন যদি আপনার ডিস্ট্রো ফেডোরা হয়
Vitor থেকে

3
ডকার যদি আপনার ফাইলটিকে উপেক্ষা করে তবে আপনার এই সমাধানটি দেবিয়ান বা উবুন্টুর কয়েকটি সংস্করণে একটি বাগের জন্য কার্যকর করতে /etc/default/dockerহবে।
নেডিম

4
graphDaemon.json মধ্যে অ্যাট্রিবিউট v17.05.0 এ অনুমোদিত নয়, ব্যবহার data-rootপরিবর্তে, cf. stackoverflow.com/a/50217666/743507
dschulten

141

মন্তব্যগুলির পরামর্শ অনুসরণ করে আমি এই উত্তরটি উন্নত করতে ডকার সিস্টেমড ডকুমেন্টেশন ব্যবহার করি । নীচে প্রক্রিয়া পুনরায় বুট করার প্রয়োজন হয় না এবং অনেক পরিষ্কার।

প্রথমে কাস্টম কনফিগারেশনের জন্য ডিরেক্টরি এবং ফাইল তৈরি করুন:

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 পেস্টের পরে ডকারের জন্য :

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"

বিকল্প পদ্ধতি মাধ্যমে daemon.json

আমি সম্প্রতি ফেডোরা 25 - তে 17.09-ce দিয়ে উপরের পদ্ধতিটি চেষ্টা করেছি এবং দেখে মনে হচ্ছে এটি কার্যকর হয়নি। /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

8
এটি কেবলমাত্র পদ্ধতি যা আমাকে উবুন্টু 16.04 এ সহায়তা করেছিল!
ভাদিম

1
এই লিংকটি ডকস.ডকার.েনজিন / অ্যাডমিন / সিস্টেমেড কিভাবে সিস্টেমডের সাথে ডকারকে কনফিগার করতে হবে তা ব্যাখ্যা করে যা উবুন্টু 16.04 এর মতো নতুন লিনাক্স বিতরণের জন্য কাজ করে।
জোসেফ হুই

6
docker infoবিবৃতি সম্ভবত পুরানো হয়েছে। উবুন্টু 16.04-এ, পুনরায় কনফিগার করা জন্য চেক sudo docker info | grep "Docker Root Dir"। অন্যথায়, ভাল উত্তর, স্বীকৃত এক হওয়া উচিত;)
গিলিয়াম পেরিট

5
লিনাক্সের নতুন সংস্করণে (4.10) এবং ডকার (ডকার-সিএ 17.06) লাইনটি অবশ্যই নিম্নরূপে পরিবর্তন করতে হবে: / usr / bin / dockerd -H fd: // --data-root = "/ mnt"
lorenzo-bettini

2
যদি আপনি দেখেন Docker Root Dir: /"/mnt"যখন আপনি রান docker info|grep "Docker Root Dir", আপনি প্রতিস্থাপন আছে --data-root="/mnt"মধ্যে --data-root=/mntফাইল ভিতরেdocker-storage.conf
সংস্করণ

61

নতুন ডকার সংস্করণগুলির জন্য আমাদের v17.05.0 তে অবহিত data-rootহিসাবে ব্যবহার করা দরকার graph: অফিসিয়াল অবহেলিত ডকস

সম্পাদনা করুন /etc/docker/daemon.json(এটি বিদ্যমান না থাকলে এটি তৈরি করুন) এবং অন্তর্ভুক্ত করুন:

{
  "data-root": "/new/path/to/docker-data"
}

তারপরে ডকার পুনরায় আরম্ভ করুন:

sudo systemctl daemon-reload
sudo systemctl restart docker
  • ডেটা-রুটের সাথে ডকার স্টোরেজ ব্যবহার করে আরও বিস্তৃত ধাপে ধাপে ব্যাখ্যা (মুভিং ডেটা সহ) পাওয়া যাবে: ব্লগ পোস্ট
  • উইন্ডোজ ক্ষেত্রে একই ধরণের পোস্ট উইন্ডোজ নির্দিষ্ট

আপনার মন্তব্য আমাকে এই পৃষ্ঠাটি সন্ধান করতে সহায়তা করেছে: adriel.co.nz/blog/2018/01/25/… ধন্যবাদ!
নাসাতোম

8
আমি মনে করি এই উত্তরটি "গৃহীত" পতাকা দেওয়ার সময় এসেছে কারণ এটি বর্তমান সংস্করণে কাজ করছে।
Bndr

Github.com/docker/docker.github.io/pull/5978 প্রকাশের পরে , এটি অফাইল ওয়েবসাইট পরিবর্তন করে , কোন সংস্করণটি এটি ব্যবহার করতে পারে তা मानिसहरूलाई জানাতে আমি এখানে মন্তব্য করছি ।
zhongjiajie

এটি আমার জন্যও কাজ করেছে, আপনাকে ধন্যবাদ :)
আশায় আম্বল্লি

39

যেহেতু আমি ফেডোরায় এটি করার জন্য সঠিক নির্দেশাবলী খুঁজে পাইনি (EDIT: লোকেরা মন্তব্য করেছে যে এটি সেন্টোস এবং স্যুসেও কাজ করা উচিত) (/ ইত্যাদি / ডিফল্ট / ডকার সেখানে ব্যবহৃত হয় না), তাই আমি যুক্ত করছি আমার এখানে উত্তর:

আপনাকে / etc / sysconfig / ডকার সম্পাদনা করতে হবে এবং অপশন ভেরিয়েবলটিতে -g বিকল্পটি যুক্ত করতে হবে। যদি একাধিক বিকল্প থাকে তবে নিশ্চিত হয়ে নিন যে আপনি এগুলি "" এ সংযুক্ত করে রেখেছেন। আমার ক্ষেত্রে, এই ফাইলটি রয়েছে:

OPTIONS=--selinux-enabled

সুতরাং এটি হয়ে যাবে

OPTIONS="--selinux-enabled -g /mnt"

পুনরায় চালু করার পরে ( systemctl restart docker), ডকারের নতুন ডিরেক্টরিটি ব্যবহার করা উচিত


CentOS 6.5 / 6.6 এবং সম্ভবত 7 এ আপনি একই / etc / sysconfig / ডকার ফাইলটি ব্যবহার করেন তবে আপনি আর্গুমেন্টগুলি ভেরিয়েবলের সাথে যুক্ত করতে পারেন_আর_আর্গগুলি।
ড্লেইড্লা

বিকল্পটি এখন DOCKER_OPTS বলা হয় (ডকার সংস্করণ 1.7.0)।
নেডিম

6
ডকারের ১.৮ সংস্করণ থেকে পরবর্তীকালে, / etc / sysconfig- এ ডকার কনফিগারেশন ফাইলগুলি ব্যবহার করে হ্রাস করা হয়েছে। পরিবর্তে, আপনার সিস্টেম / ড্রপ-ইন কনফিগারেশন ফাইলগুলি ইত্যাদি / systemd / system / docker.service.d এ ব্যবহার করা উচিত। ডকার সার্ভিস চলাকালীন একটি ড্রপ-ইন ফাইল যুক্ত বা সংশোধন করার পরে, সিস্টেমডকে পরিষেবার জন্য কনফিগারেশনটি পুনরায় লোড করতে কমান্ড systemctl ডেমন-রিলোড লোড করুন। docs.oracle.com/cd/E52668_01/E54669/html/…
পাবলো মেরিন-গার্সিয়া

এবং ড্রপ-ইন ফাইলগুলি ডকস.ডকার
পাবলো মেরিন-গার্সিয়া

23

ডকার ফোল্ডারটিকে / mnt এ সরানোর জন্য একটি প্রতীকী লিঙ্ক ব্যবহার করবেন না (উদাহরণস্বরূপ)। এটি ডকার আরএম কমান্ডের সাথে সমস্যায় পড়তে পারে ।

ডকারের জন্য -g অপশনটি আরও ভাল ব্যবহার করুন। উবুন্টুতে আপনি এটিকে স্থায়ীভাবে /etc/default/docker.io এ সেট করতে পারেন। DOCKER_OPTS লাইনটি বাড়ান বা প্রতিস্থাপন করুন।

এখানে একটি উদাহরণ: OC DOCKER_OPTS = "- g / mnt / কোথাও / অন্য / ডকার /"


আমার ক্ষেত্রে আমাকে পুনরায় চালু করতে হয়েছিল
psychok7

1
docker rmএকটি সিমলিংক ব্যবহার করার সময় আমার কী ধরণের সমস্যা আশা করতে হবে ?
বুধবার

1
আমিও এই কি ছিল Ubuntu 16.04 stackoverflow.com/a/30219552/977622 কাজ এটি পেতে
psychok7

21

এটি করার অনেক সহজ উপায়:

ডকার পরিষেবা বন্ধ করুন

sudo systemctl stop docker

বিদ্যমান ডকার ডিরেক্টরিটি নতুন স্থানে সরান

sudo mv /var/lib/docker/ /path/to/new/docker/

প্রতীকী লিঙ্ক তৈরি করুন

sudo ln -s /path/to/new/docker/ /var/lib/docker

ডকার পরিষেবা শুরু করুন

sudo systemctl start docker

2
এটি আইএমও হ'ল সঠিক এবং সবচেয়ে সহজ সমাধান - আমার পক্ষে কাজ করেছে।
মার্টিন ডিভোরাক

2
প্রতীকী লিংক কমান্ডটির পিছনে পিছনে ছাড়াই আমার জন্য sudo ln -s /path/to/new/docker/ /var/lib/docker
মোহনীয়ের মতো কাজ করেছে

ডকার ফোরামগুলি এটাই পরামর্শ দেয়: forums.docker.com/t/…
হেডড্যাব

এটি একটি দুর্দান্ত সমাধান যা আমার জীবন বাঁচিয়েছে। :)
নাইক্ষ সুধাকরণ

আমি উপরে মৃত্যুদন্ড কার্যকর করেছি এবং ডকার প্রস্তুত এবং চলমান ছিল। তবে আমি আমার ডকারের চিত্রগুলি ইতিমধ্যে বিদ্যমান দেখতে পাচ্ছি না। কোনও পরামর্শ?
থিলিনা ভিরাজ

13

এই সমাধানটি রেড হ্যাট 7.2 এবং ডকার 1.12.0 এ কাজ করে

আপনার পাঠ্য সম্পাদকটিতে /lib/systemd/system/docker.service ফাইলটি সম্পাদনা করুন ।

যোগ -G / পথ / থেকে / Docker / শেষে ExecStart নির্দেশ। সম্পূর্ণ লাইনটি দেখতে এটির মতো হওয়া উচিত।

ExecStart=/usr/bin/dockerd -g /path/to/docker/

নীচের আদেশটি কার্যকর করুন

systemctl daemon-reload
systemctl restart docker

ডকার ডিরেক্টরি পরীক্ষা করার জন্য কমান্ডটি কার্যকর করুন

docker info | grep "loop file\|Dir"

আপনার যদি রেড হ্যাট বা ডকারে ১.7.১ এ / ইত্যাদি / সিসকনফিগ / ডকার ফাইল থাকে তবে এই উত্তরটি দেখুন।


আমার কেস: সেন্টোস 7, সর্বশেষ ডকার; "ডকার.সার্ভিস" ফাইলটি খুঁজতে আমাকে "সিস্টেমেস্টেট স্ট্যাটাস ডকার" কল করতে হয়েছিল এবং উত্তরের মতো "-g" বিকল্পটি যুক্ত করতে হয়েছিল। ধন্যবাদ
ডাটদিনহোকোক

13

বিজয়ীর উত্তরের কপি-পেস্ট সংস্করণ :)

কেবলমাত্র এই বিষয়বস্তু দিয়ে এই ফাইলটি তৈরি করুন:

$ sudo vi /etc/docker/daemon.json

  {
      "graph": "/my-docker-images"
  }

Ubuntu 16.04.2 LTSডকারে পরীক্ষিত1.12.6


1
graphDaemon.json মধ্যে অ্যাট্রিবিউট v17.05.0 এ অনুমোদিত নয়, ব্যবহার data-rootপরিবর্তে, cf. stackoverflow.com/a/50217666/743507
dschulten

12

CentOS 6.5 এ

service docker stop
mkdir /data/docker  (new directory)
vi /etc/sysconfig/docker

নিম্নলিখিত লাইন যুক্ত করুন

other_args=" -g /data/docker -p /var/run/docker.pid"

তারপরে ফাইলটি সংরক্ষণ করুন এবং আবার ডকার শুরু করুন

service docker start

এবং মধ্যে সংগ্রহস্থল ফাইল তৈরি করবে /data/docker


6

ডেবিয়ান / উবুন্টু বা ফেডোরার জন্য, আপনি সম্ভবত অন্যান্য উত্তরগুলি ব্যবহার করতে পারেন। তবে আপনার কাছে /etc/default/dockerবা এর অধীনে ফাইলগুলি না থাকলে /etc/sysconfig/dockerএবং আপনার সিস্টেমটি সিস্টেমড চলছে, আপনি এই উত্তরটি h3nrik দ্বারা অনুসরণ করতে পারেন । আমি আর্চ ব্যবহার করছি এবং এটি আমার জন্য কাজ করে।

মূলত, আপনাকে নতুন ডকার চিত্রের অবস্থানটি পরিবেশের ভেরিয়েবল হিসাবে পড়তে কনফিগার করতে হবে এবং সেই পরিবেশের পরিবর্তনশীলটিকে ডকার ডেমন এক্সিকিউশন স্ক্রিপ্টে পাস করতে হবে।

সম্পূর্ণতার জন্য, এখানে h3nrick এর উত্তর:


আপনার কাছে কোন /lib/systemd/system/docker.serviceফাইল আছে?

যদি তাই হয়, সম্পাদনা এটা যাতে Docker সেবা চলিত ব্যবহার /etc/default/dockerএকটি পরিবেশ ফাইল হিসাবে: EnvironmentFile=-/etc/default/docker

ইন /etc/default/dockerফাইল তারপর যোগ DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"

শেষে শুধু একটি systemctl daemon-reload && systemctl restart docker

আরও তথ্যের জন্য দয়া করে ডকুমেন্টেশনটি দেখুন


আপনি যদি ডিবানের জন্য বর্তমান ডকার ইনস্টল নির্দেশাবলী অনুসরণ করেন তবে আপনি সিসভিনিট স্ক্রিপ্ট পাবেন তবে সেগুলি ব্যবহৃত হয় না। Github.com/docker/docker/issues/9889#issuecomment-109766580
সাইমন উডসাইড

4

আরও সহজ সমাধান হ'ল আপনি যা চান তার নরম লিঙ্ক পয়েন্ট তৈরি করা, যেমন

link -s /var/lib/docker /mnt/whatever

এটি আমার সেন্টোস 6.5 সার্ভারে আমার জন্য কাজ করে।


6
কোনও সফটলিঙ্ক তৈরি করবেন না। আমার মন্তব্যটি পোস্ট করার কারণগুলি আগে ... কারণ আপনি 'ডকার আরএম' কমান্ড নিয়ে সমস্যায় পড়তে পারেন!
সুতার

2
@ সুথার: মে? এখন এমন কোন পরিস্থিতি আছে যে আপনি সমস্যায় পড়েছেন নাকি? প্রযুক্তিগত ডকুমেন্টেশনের জন্য মে কিছুটা অসম্পূর্ণতা, আমি যদি কোনও সমস্যার মুখোমুখি হই তবে আমি ঠিক কখন ঘটে তা শিখতে চাই, সেই সমস্যাটি কীভাবে ঘটে এবং ফলাফল কীভাবে হবে।
hakre

4

@Mbarthelemy দ্বারা পুনর্বিবেচনা -gঅনুসারে ডকার ডেমন সরাসরি শুরু করার সাথে সাথে বিকল্পের মাধ্যমে এটি করা যেতে পারে ।

তবে, যদি ডকার একটি সিস্টেম পরিষেবা হিসাবে শুরু করা হচ্ছে, তবে /etc/default/dockerফাইলটি সংশোধন করার পরামর্শ দেওয়া হয় না । সেখানে অবস্থিত এই একটি গাইডলাইন হল এখানে

সঠিক পন্থাটি হ'ল /etc/docker/daemon.jsonলিনাক্স (বা ম্যাক) সিস্টেমে বা %programdata%\docker\config\daemon.jsonউইন্ডোজে কোনও ফাইল তৈরি করা । যদি এই ফাইলটি অন্য কোনও কিছুর জন্য ব্যবহার না করা হয় তবে নিম্নলিখিত ক্ষেত্রগুলি পর্যাপ্ত হওয়া উচিত:

{
    "graph": "/docker/daemon_files"
}

এটি এমন নতুন অবস্থান ধরে নিচ্ছে যেখানে আপনি ডকারের ডেটাটি ধরে রাখতে চান /docker/daemon_files


2

ওপেনসুসে লিপ 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 প্রাথমিকভাবে খালি ছিল এবং ডককে আমার নতুন ডিরেক্টরি ব্যবহার করার যুক্তিতে আমি সমস্ত কিছু যুক্ত করেছিলাম


2

ফেডোরা 26 এবং সম্ভবত আরও অনেক সংস্করণে, আপনার বেস ফোল্ডারের অবস্থান উপরে বর্ণিত হিসাবে স্থানান্তরিত করার পরে আপনি একটি ত্রুটির সম্মুখীন হতে পারেন। এটি বিশেষত সত্য যদি আপনি এটিকে / বাড়ির নীচে কোথাও নিয়ে যাচ্ছেন। কারণ সেলিনাক্স ডোকার ধারককে এই অবস্থানের নিচে থেকে তার প্রচুর প্রোগ্রাম চালানো থেকে বাধা দেয়।

সংক্ষিপ্ত সমাধানটি হ'ল - -able পরামিতি যুক্ত করার পরে - সক্ষম-সেলিনাক্স বিকল্পটি সরিয়ে ফেলা।


আক্রমণের জন্য খোলা জায়গা না?
ইউরিপলোক

1

একটি এডাব্লুএস উবুন্টু 16.04 সার্ভারে আমি ডকার ইমেজগুলিকে একটি পৃথক ইবিএসে রেখেছিলাম, / হোম / উবুন্টু / কাগল / উপর লাগানো, ডকারের নীচে

আমার আরম্ভের স্ক্রিপ্টের এই স্নিপেটটি সঠিকভাবে কাজ করেছে

# 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

0

১.0.০6.০-সি-ম্যাক ১৯ সংস্করণে ম্যাক ব্যবহারকারীদের জন্য আপনি পছন্দসমূহ বিকল্পে ইউজার ইন্টারফেস থেকে ডিস্ক চিত্রের অবস্থানটি সরাতে পারবেন কেবলমাত্র ডিস্ক চিত্রের অবস্থান পরিবর্তন করুন এবং এটি ( ডিস্কের চিত্রটি সরান ক্লিক করে ) এবং পুনরায় চালু করার কাজ করবে ডক এই পদ্ধতির সাহায্যে আমি ডকার ইমেজগুলি সংরক্ষণের জন্য আমার বাহ্যিক হার্ডডিস্কটি ব্যবহার করতে সক্ষম হয়েছি।


ডকারের বিদ্যমান ফাইলগুলি সম্পর্কে কীভাবে? আমাদের কি এটি ম্যানুয়ালি সরানো উচিত?
গুস্তাভ

আপনি আপনার পছন্দের কোনও স্থানে ডকার পুনরায় ইনস্টল করার চেষ্টা করতে পারেন। চিত্র এবং ডকার ফাইলগুলি স্বাধীন।
সাহু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.