Từ những gì tôi có thể nói, hình ảnh docker được cài đặt /var/lib/docker
khi chúng được kéo. Có cách nào để thay đổi vị trí này, chẳng hạn như âm lượng được gắn như thế /mnt
nào không?
Từ những gì tôi có thể nói, hình ảnh docker được cài đặt /var/lib/docker
khi chúng được kéo. Có cách nào để thay đổi vị trí này, chẳng hạn như âm lượng được gắn như thế /mnt
nào không?
Câu trả lời:
Với các phiên bản gần đây của Docker, bạn sẽ đặt giá trị của data-root
tham số vào đường dẫn tùy chỉnh của mình, trong /etc/docker/daemon.json
(theo https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file ).
Với các phiên bản cũ hơn, bạn có thể thay đổi thư mục cơ sở lưu trữ của Docker (nơi chứa container và hình ảnh) bằng cách sử dụng -g
tùy chọn khi khởi động trình nền Docker. (kiểm tra docker --help
). Bạn có thể áp dụng cài đặt này tự động khi Docker bắt đầu bằng cách thêm nó vào / etc / default / docker
-g
tùy chọn này vào / etc / defaults / docker thay vì sửa đổi tệp Upstart, xem câu trả lời của tôi.
DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
graph
thuộc tính trong daemon.json bị phản đối như của v17.05.0, sử dụng data-root
thay vào đó, cf. stackoverflow.com/a/50217666/743507
Theo lời khuyên từ các bình luận, tôi sử dụng tài liệu hệ thống Docker để cải thiện câu trả lời này. Dưới đây thủ tục không yêu cầu khởi động lại và sạch hơn nhiều.
Đầu tiên tạo thư mục và tập tin cho cấu hình tùy chỉnh:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
Đối với phiên bản docker trước khi dán 17,06-ce :
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"
Đối với docker sau khi dán 17,06 ce :
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"
daemon.json
Gần đây tôi đã thử quy trình trên với 17,09 ce trên Fedora 25 và dường như nó không hoạt động. Thay vì sửa đổi đơn giản trong /etc/docker/daemon.json
thực hiện các mẹo:
{
"graph": "/mnt",
"storage-driver": "overlay"
}
Mặc dù phương pháp bạn phải tải lại cấu hình và khởi động lại Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
Để xác nhận rằng Docker đã được cấu hình lại:
docker info|grep "loop file"
Trong phiên bản gần đây (17.03) lệnh khác nhau được yêu cầu:
docker info|grep "Docker Root Dir"
Đầu ra sẽ trông như thế này:
Data loop file: /mnt/devicemapper/devicemapper/data
Metadata loop file: /mnt/devicemapper/devicemapper/metadata
Hoặc là:
Docker Root Dir: /mnt
Sau đó, bạn có thể xóa bộ lưu trữ Docker cũ một cách an toàn:
rm -rf /var/lib/docker
docker info
tuyên bố có lẽ là lỗi thời. Trên Ubuntu 16.04, kiểm tra cấu hình lại là sudo docker info | grep "Docker Root Dir"
. Nếu không, câu trả lời tốt, nên là câu trả lời được chấp nhận;)
Docker Root Dir: /"/mnt"
khi bạn chạy docker info|grep "Docker Root Dir"
, bạn phải thay thế --data-root="/mnt"
vào --data-root=/mnt
bên trong tệpdocker-storage.conf
Đối với các phiên bản docker mới, chúng tôi cần sử dụng data-root
như graph
không dùng nữa trong v17.05.0: tài liệu không dùng chính thức
Chỉnh sửa /etc/docker/daemon.json
(nếu nó không tồn tại, tạo nó) và bao gồm:
{
"data-root": "/new/path/to/docker-data"
}
Sau đó khởi động lại Docker với:
sudo systemctl daemon-reload
sudo systemctl restart docker
Vì tôi không tìm thấy hướng dẫn chính xác để thực hiện việc này trong Fedora (EDIT: mọi người đã nhận xét rằng điều này cũng sẽ hoạt động trên CentOS và Suse) (/ etc / default / docker không được sử dụng ở đó), tôi thêm vào trả lời ở đây:
Bạn phải chỉnh sửa / etc / sysconfig / docker và thêm tùy chọn -g trong biến TÙY CHỌN. Nếu có nhiều hơn một tùy chọn, hãy đảm bảo bạn gửi chúng vào "". Trong trường hợp của tôi, tập tin đó chứa:
OPTIONS=--selinux-enabled
vì vậy nó sẽ trở thành
OPTIONS="--selinux-enabled -g /mnt"
Sau khi khởi động lại ( systemctl restart docker
), Docker nên sử dụng thư mục mới
Không sử dụng Liên kết tượng trưng để di chuyển thư mục docker sang / mnt (ví dụ). Điều này có thể gây rắc rối với lệnh docker rm .
Sử dụng tốt hơn Tùy chọn -g cho docker. Trên Ubuntu, bạn có thể đặt nó vĩnh viễn trong /etc/default/docker.io. Tăng cường hoặc thay thế Dòng DOCKER_OPTS.
Dưới đây là một ví dụ: `DOCKER_OPTS =" - g / mnt / ở đâu đó / khác / docker / "
docker rm
khi sử dụng symlink?
Ubuntu 16.04
stackoverflow.com/a/30219552/977622 để làm cho nó hoạt động
Dừng dịch vụ cập cảng
sudo systemctl stop docker
Di chuyển thư mục docker hiện tại đến vị trí mới
sudo mv /var/lib/docker/ /path/to/new/docker/
Tạo liên kết tượng trưng
sudo ln -s /path/to/new/docker/ /var/lib/docker
Bắt đầu dịch vụ cập cảng
sudo systemctl start docker
sudo ln -s /path/to/new/docker/ /var/lib/docker
Giải pháp này hoạt động trên Red Hat 7.2 & Docker 1.12.0
Chỉnh sửa tệp /lib/systemd/system/docker.service trong trình soạn thảo văn bản của bạn.
thêm -g / path / to / docker / vào cuối lệnh ExecStart . Dòng hoàn chỉnh sẽ trông như thế này.
ExecStart=/usr/bin/dockerd -g /path/to/docker/
Thực hiện lệnh dưới đây
systemctl daemon-reload
systemctl restart docker
Thực hiện lệnh để kiểm tra thư mục docker
docker info | grep "loop file\|Dir"
Nếu bạn có tệp / etc / sysconfig / docker trong Red Hat hoặc docker 1.7.1, hãy kiểm tra câu trả lời này .
Phiên bản sao chép và dán của câu trả lời người chiến thắng :)
Tạo tệp này chỉ với nội dung này:
$ sudo vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
Đã thử nghiệm trên Ubuntu 16.04.2 LTS
docker1.12.6
graph
thuộc tính trong daemon.json bị phản đối như của v17.05.0, sử dụng data-root
thay vào đó, cf. stackoverflow.com/a/50217666/743507
Đối với Debian / Ubuntu hoặc Fedora, bạn có thể sử dụng các câu trả lời khác. Nhưng nếu bạn không có tệp dưới /etc/default/docker
hoặc /etc/sysconfig/docker
và hệ thống của bạn đang chạy systemd, bạn có thể muốn làm theo câu trả lời này của h3nrik . Tôi đang sử dụng Arch, và điều này làm việc cho tôi.
Về cơ bản, bạn cần cấu hình systemd để đọc vị trí hình ảnh docker mới dưới dạng biến môi trường và chuyển biến môi trường đó vào tập lệnh thực thi Docker daemon.
Để đầy đủ, đây là câu trả lời của h3nrick:
Bạn có /lib/systemd/system/docker.service
tập tin?
Nếu vậy, hãy chỉnh sửa nó để dịch vụ Docker sử dụng thông thường /etc/default/docker
như một tệp môi trường:EnvironmentFile=-/etc/default/docker
.
Trong /etc/default/docker
tập tin sau đó thêmDOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"
.
Cuối cùng chỉ cần làm một systemctl daemon-reload && systemctl restart docker
.
Để biết thêm thông tin xin vui lòng xem tài liệu .
Một giải pháp đơn giản hơn nhiều là tạo một điểm liên kết mềm tới bất cứ thứ gì bạn muốn, chẳng hạn như
link -s /var/lib/docker /mnt/whatever
Nó hoạt động với tôi trên máy chủ CentOS 6.5 của tôi.
Theo khuyến nghị của @mbarthelemy, điều này có thể được thực hiện thông qua -g
tùy chọn khi khởi động trực tiếp trình nền của docker .
Tuy nhiên, nếu docker đang được khởi động như một dịch vụ hệ thống, thì không nên sửa đổi /etc/default/docker
tệp. Có một hướng dẫn này nằm ở đây .
Cách tiếp cận đúng là tạo một /etc/docker/daemon.json
tệp trên các hệ thống Linux (hoặc Mac) hoặc %programdata%\docker\config\daemon.json
trên Windows. Nếu tệp này không được sử dụng cho bất cứ điều gì khác, các trường sau sẽ đủ:
{
"graph": "/docker/daemon_files"
}
Đây là giả định vị trí mới mà bạn muốn có docker duy trì dữ liệu của nó là /docker/daemon_files
Trên 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"
Lưu ý rằng DOCKER_OPTS ban đầu trống và tất cả những gì tôi đã làm là thêm vào đối số để làm cho docker sử dụng thư mục mới của tôi
Trên Fedora 26 và có thể nhiều phiên bản khác, bạn có thể gặp lỗi sau khi di chuyển vị trí thư mục cơ sở của mình như được mô tả ở trên. Điều này đặc biệt đúng nếu bạn đang di chuyển nó đến một nơi nào đó dưới / nhà. Điều này là do SeLinux khởi động và ngăn chặn container docker chạy nhiều chương trình của nó từ dưới vị trí này.
Giải pháp ngắn gọn là loại bỏ tùy chọn --enable-selinux khi bạn thêm tham số -g.
Trên máy chủ AWS Ubuntu 16.04, tôi đặt các hình ảnh Docker trên một EBS riêng biệt, được gắn trên / home / ubfox / kaggle /, dưới thư mục docker
Đoạn mã kịch bản khởi tạo của tôi hoạt động chính xác
# 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
Đối với người dùng Mac ở phiên bản 17,06-ce-mac19, bạn chỉ cần di chuyển vị trí Đĩa ảnh từ giao diện người dùng trong tùy chọn tùy chọn Chỉ cần thay đổi vị trí của ảnh đĩa và nó sẽ hoạt động (bằng cách nhấp vào Di chuyển hình ảnh đĩa ) và khởi động lại bến tàu. Sử dụng phương pháp này tôi đã có thể sử dụng ổ cứng ngoài để lưu trữ hình ảnh docker.