จากสิ่งที่ฉันสามารถบอกได้ภาพนักเทียบท่าจะถูกติดตั้งไว้/var/lib/docker
ตามที่ดึงออกมา มีวิธีในการเปลี่ยนตำแหน่งนี้เช่นไปยังไดรฟ์ข้อมูลที่ติดตั้งเป็น/mnt
อย่างไร
จากสิ่งที่ฉันสามารถบอกได้ภาพนักเทียบท่าจะถูกติดตั้งไว้/var/lib/docker
ตามที่ดึงออกมา มีวิธีในการเปลี่ยนตำแหน่งนี้เช่นไปยังไดรฟ์ข้อมูลที่ติดตั้งเป็น/mnt
อย่างไร
คำตอบ:
ด้วย Docker เวอร์ชันล่าสุดคุณจะต้องตั้งค่าdata-root
พารามิเตอร์เป็นพา ธ ที่กำหนดเองของคุณใน/etc/docker/daemon.json
(ตามhttps://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file )
ด้วยเวอร์ชันที่เก่ากว่าคุณสามารถเปลี่ยนไดเรกทอรีฐานของที่เก็บข้อมูลของ Dock (ที่ที่เก็บและรูปภาพไป) โดยใช้-g
ตัวเลือกเมื่อเริ่มต้น Docker daemon (ตรวจสอบ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
คำแนะนำต่อไปนี้จากความคิดเห็นที่ฉันใช้เอกสาร Docker systemdเพื่อปรับปรุงคำตอบนี้ ขั้นตอนด้านล่างไม่จำเป็นต้องรีบูตและสะอาดกว่ามาก
ขั้นแรกสร้างไดเรกทอรีและไฟล์สำหรับการกำหนดค่าแบบกำหนดเอง:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
สำหรับนักเทียบท่าเวอร์ชันก่อน 17.06-ce paste:
[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
ฉันเพิ่งลองขั้นตอนข้างต้นด้วย17.09-ceใน Fedora 25 และดูเหมือนจะไม่ทำงาน แทนการปรับเปลี่ยนอย่างง่ายในการ/etc/docker/daemon.json
ทำเคล็ดลับ:
{
"graph": "/mnt",
"storage-driver": "overlay"
}
แม้จะมีวิธีที่คุณต้องโหลดการกำหนดค่าและรีสตาร์ท Docker:
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
จากนั้นคุณสามารถลบที่เก็บข้อมูล Docker เก่าได้อย่างปลอดภัย:
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"
}
จากนั้นรีสตาร์ท Docker ด้วย:
sudo systemctl daemon-reload
sudo systemctl restart docker
เนื่องจากฉันไม่พบคำแนะนำที่ถูกต้องสำหรับการทำเช่นนี้ใน Fedora (แก้ไข: ผู้คนชี้ความเห็นว่าควรใช้ CentOS และ Suse ด้วย) (/ etc / default / docker ไม่ได้ใช้ที่นั่น) ฉันจึงเพิ่ม ตอบที่นี่:
คุณต้องแก้ไข/ etc / sysconfig / dockerและเพิ่มตัวเลือก -g ในตัวแปร OPTIONS หากมีมากกว่าหนึ่งตัวเลือกตรวจสอบให้แน่ใจว่าคุณใส่ไว้ใน "" ในกรณีของฉันไฟล์นั้นมี:
OPTIONS=--selinux-enabled
ดังนั้นมันจะกลายเป็น
OPTIONS="--selinux-enabled -g /mnt"
หลังจากรีสตาร์ท ( systemctl restart docker
) แล้ว Docker ควรใช้ไดเรกทอรีใหม่
อย่าใช้ลิงก์สัญลักษณ์เพื่อย้ายโฟลเดอร์นักเทียบท่าไปที่ / mnt (ตัวอย่าง) สิ่งนี้อาจทำให้เกิดปัญหากับคำสั่งdocker rm
ควรใช้ตัวเลือก -g สำหรับนักเทียบท่า บน Ubuntu คุณสามารถตั้งค่าอย่างถาวรใน /etc/default/docker.io ปรับปรุงหรือแทนที่บรรทัด DOCKER_OPTS
นี่คือตัวอย่าง: `DOCKER_OPTS =" - g / mnt / ที่ไหนสักแห่ง / อื่น / นักเทียบท่า / "
docker rm
เมื่อใช้ symlink
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
เริ่มบริการนักเทียบท่า
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ในเท็กซ์เอดิเตอร์ของคุณ
เพิ่ม-g / path / to / docker /ท้ายคำสั่งExecStart บรรทัดที่สมบูรณ์ควรมีลักษณะเช่นนี้
ExecStart=/usr/bin/dockerd -g /path/to/docker/
ดำเนินการคำสั่งด้านล่าง
systemctl daemon-reload
systemctl restart docker
ดำเนินการคำสั่งเพื่อตรวจสอบไดเร็กทอรีนักเทียบท่า
docker info | grep "loop file\|Dir"
ถ้าคุณมีetc / sysconfig / นักเทียบท่า /แฟ้มในหมวกสีแดงหรือนักเทียบท่า 1.7.1 ตรวจสอบนี้คำตอบ
คำตอบผู้ชนะเวอร์ชันคัดลอกและวาง :)
สร้างไฟล์นี้ด้วยเนื้อหานี้เท่านั้น:
$ sudo 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
ใน 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
สำหรับ Debian / Ubuntu หรือ Fedora คุณอาจใช้คำตอบอื่น ๆ ได้ แต่ถ้าคุณไม่ได้มีไฟล์ภายใต้/etc/default/docker
หรือ/etc/sysconfig/docker
และระบบของคุณทำงาน systemd คุณอาจต้องการที่จะปฏิบัติตามคำตอบนี้โดย h3nrik ฉันใช้ Arch และมันใช้งานได้สำหรับฉัน
โดยทั่วไปคุณต้องกำหนดค่า systemd เพื่ออ่านตำแหน่งรูปภาพของนักเทียบท่าใหม่เป็นตัวแปรสภาพแวดล้อมและส่งผ่านตัวแปรสภาพแวดล้อมนั้นไปยังสคริปต์การเรียกใช้งาน Docker daemon
เพื่อความสมบูรณ์นี่คือคำตอบของ h3nrick:
คุณมี/lib/systemd/system/docker.service
ไฟล์ไหม
ถ้าเป็นเช่นนั้นการแก้ไขเพื่อให้บริการเทียบท่าที่ใช้ปกติเป็นไฟล์สภาพแวดล้อม:/etc/default/docker
EnvironmentFile=-/etc/default/docker
ในไฟล์แล้วเพิ่ม/etc/default/docker
DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"
systemctl daemon-reload && systemctl restart docker
ในตอนท้ายเพียงทำ
วิธีแก้ปัญหาที่ง่ายกว่าคือการสร้างจุดเชื่อมโยงที่อ่อนนุ่มให้กับสิ่งที่คุณต้องการเช่น
link -s /var/lib/docker /mnt/whatever
มันใช้งานได้สำหรับฉันบนเซิร์ฟเวอร์ CentOS 6.5 ของฉัน
ตามที่ถูกแนะนำโดย @mbarthelemy สิ่งนี้สามารถทำได้ผ่าน-g
ตัวเลือกเมื่อเริ่มต้นนักเทียบท่า daemon โดยตรง
อย่างไรก็ตามหากนักเทียบท่ากำลังเริ่มบริการระบบไม่แนะนำให้แก้ไข/etc/default/docker
ไฟล์ มีแนวทางในการนี้อยู่คือที่นี่
แนวทางที่ถูกต้องคือการสร้าง/etc/docker/daemon.json
ไฟล์บนระบบ Linux (หรือ Mac) หรือ%programdata%\docker\config\daemon.json
บน Windows หากไม่ได้ใช้ไฟล์นี้เพื่อสิ่งอื่นใดฟิลด์ต่อไปนี้ควรพอเพียง:
{
"graph": "/docker/daemon_files"
}
นี่คือการสมมติว่าตำแหน่งใหม่ที่คุณต้องการให้นักเทียบท่ายืนยันข้อมูลอยู่ /docker/daemon_files
บน openSUSE Leap 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 ว่างเปล่าในตอนแรกและทั้งหมดที่ฉันทำคือเพิ่มในอาร์กิวเมนต์เพื่อให้นักเทียบท่าใช้ไดเรกทอรีใหม่ของฉัน
ใน Fedora 26 และรุ่นอื่น ๆ อีกมากมายคุณอาจพบข้อผิดพลาดหลังจากย้ายตำแหน่งโฟลเดอร์พื้นฐานตามที่อธิบายไว้ข้างต้น นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งหากคุณย้ายไปที่ใดที่หนึ่งภายใต้ / บ้าน นี่เป็นเพราะ SeLinux เริ่มทำงานและป้องกันไม่ให้นักเทียบท่าคอนเทนเนอร์ทำงานหลาย ๆ โปรแกรมภายใต้ตำแหน่งนี้
ทางออกสั้น ๆ คือการลบตัวเลือก --enable-selinux เมื่อคุณเพิ่มพารามิเตอร์ -g
บน AWS Ubuntu 16.04 Server ฉันใส่อิมเมจ Docker ใน EBS แยกต่างหากติดตั้งบน / home / ubuntu / kaggle / ภายใต้ dir docker
ตัวอย่างของสคริปต์การเริ่มต้นของฉันนี้ทำงานอย่างถูกต้อง
# 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
สำหรับผู้ใช้ Mac ในเวอร์ชั่น 17.06.0-ce-mac19 คุณสามารถย้ายตำแหน่งของอิมเมจดิสก์จากส่วนต่อประสานผู้ใช้ในตัวเลือกการตั้งค่าเพียงแค่เปลี่ยนตำแหน่งของอิมเมจของดิสก์และมันจะทำงาน (โดยการคลิกย้ายดิสก์อิมเมจ ) และรีสตาร์ท นักเทียบท่า การใช้วิธีการนี้ทำให้ฉันสามารถใช้ฮาร์ดดิสก์ภายนอกของฉันเพื่อจัดเก็บภาพนักเทียบท่า