Söyleyebileceğim kadarıyla, docker görüntüleri /var/lib/docker
çekildikçe kurulur . Bu yeri değiştirmenin bir yolu var mı /mnt
?
Söyleyebileceğim kadarıyla, docker görüntüleri /var/lib/docker
çekildikçe kurulur . Bu yeri değiştirmenin bir yolu var mı /mnt
?
Yanıtlar:
Docker'ın son sürümlerinde, data-root
parametrenin değerini özel yolunuza /etc/docker/daemon.json
göre ayarlarsınız ( https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file adresine göre ).
Daha eski sürümlerde, -g
Docker arka plan programı başlatılırken seçeneği kullanarak Docker'ın depolama temel dizinini (kapsayıcı ve görüntülerin gittiği yer) değiştirebilirsiniz . (kontrol edin docker --help
). Docker başladığında / etc / default / docker'a ekleyerek bu ayarın otomatik olarak uygulanmasını sağlayabilirsiniz.
-g
seçeneği Upstart dosyasını değiştirmek yerine / etc / defaults / docker'a eklemektir .
DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
graph
Daemon.json öznitelik v17.05.0 itibariyle önerilmemektedir kullanımı data-root
, bakınız, bunun yerine stackoverflow.com/a/50217666/743507
Yorumlardan tavsiye alındıktan sonra bu yanıtı geliştirmek için Docker systemd belgelerini kullanıyorum. Aşağıdaki prosedür yeniden başlatma gerektirmez ve çok daha temizdir.
Öncelikle özel yapılandırma için dizin ve dosya oluşturun:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
17.06-ce macundan önceki liman işçisi sürümü için :
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"
17.06-ce hamurdan sonra liman işçisi için :
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"
daemon.json
Geçenlerde Fedora 25 üzerinde 17.09-ce ile yukarıdaki prosedürü denedim ve çalışmıyor gibi görünüyor. Bu basit değişiklik yerine /etc/docker/daemon.json
hile yapın:
{
"graph": "/mnt",
"storage-driver": "overlay"
}
Yönteme rağmen yapılandırmayı yeniden yüklemeniz ve Docker'ı yeniden başlatmanız gerekir:
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker'ın yeniden yapılandırıldığını onaylamak için:
docker info|grep "loop file"
Son sürümde (17.03) farklı komutlar gereklidir:
docker info|grep "Docker Root Dir"
Çıktı şöyle görünmelidir:
Data loop file: /mnt/devicemapper/devicemapper/data
Metadata loop file: /mnt/devicemapper/devicemapper/metadata
Veya:
Docker Root Dir: /mnt
Ardından eski Docker depolama alanını güvenle kaldırabilirsiniz:
rm -rf /var/lib/docker
docker info
İfadesi muhtemelen eski. Ubuntu 16.04'te yeniden yapılandırılmış olup olmadığı kontrol edilir sudo docker info | grep "Docker Root Dir"
. Aksi takdirde, iyi bir cevap kabul edilmelidir;)
Docker Root Dir: /"/mnt"
size çalıştırdığında docker info|grep "Docker Root Dir"
, değiştirmek zorunda --data-root="/mnt"
içine --data-root=/mnt
dosyası içindedocker-storage.conf
Yeni docker sürümleri için v17.05.0'da onaylandığı data-root
gibi kullanmamız gerekiyor graph
: resmi kullanımdan kaldırılmış dokümanlar
Düzenleyin /etc/docker/daemon.json
(yoksa, oluşturun) ve şunları ekleyin:
{
"data-root": "/new/path/to/docker-data"
}
Ardından Docker'ı aşağıdakilerle yeniden başlatın:
sudo systemctl daemon-reload
sudo systemctl restart docker
Fedora'da bunu yapmak için doğru talimatları bulamadığım için (EDIT: insanlar bunun CentOS ve Suse üzerinde de çalışması gerektiğini belirtti) (/ etc / default / docker orada kullanılmıyor), buraya cevap ver:
/ Etc / sysconfig / docker öğesini düzenlemeniz ve OPTIONS değişkenine -g seçeneğini eklemeniz gerekir. Birden fazla seçenek varsa, bunları "" içine aldığınızdan emin olun. Benim durumumda, bu dosya şunları içeriyordu:
OPTIONS=--selinux-enabled
böylece olur
OPTIONS="--selinux-enabled -g /mnt"
Bir restart ( systemctl restart docker
) işleminden sonra Docker yeni dizini kullanmalıdır
Docker klasörünü / mnt'ye taşımak için sembolik bir Bağlantı kullanmayın (örneğin). Bu, docker rm komutunda soruna neden olabilir .
Docker için -g Seçeneğini kullanın. Ubuntu'da kalıcı olarak /etc/default/docker.io içinde ayarlayabilirsiniz. DOCKER_OPTS Hattını geliştirin veya değiştirin.
İşte bir örnek: `DOCKER_OPTS =" - g / mnt / bir yerde / else / docker / "
docker rm
Bir sembolik bağlantısı kullanırken ne tür bir sorun beklemeliyim ?
Ubuntu 16.04
stackoverflow.com/a/30219552/977622 yapmak zorunda
Liman hizmetini durdur
sudo systemctl stop docker
Mevcut docker dizinini yeni bir konuma taşıyın
sudo mv /var/lib/docker/ /path/to/new/docker/
Sembolik bağlantı oluştur
sudo ln -s /path/to/new/docker/ /var/lib/docker
Liman hizmetini başlat
sudo systemctl start docker
sudo ln -s /path/to/new/docker/ /var/lib/docker
Bu çözüm Red Hat 7.2 ve Docker 1.12.0 üzerinde çalışır
/Lib/systemd/system/docker.service dosyasını düzenleyinMetin düzenleyicinizde düzenleyin.
eklemek -g / bir / yer / liman işçisi / sonunda ExecStart direktifi. Tüm çizgi böyle görünmelidir.
ExecStart=/usr/bin/dockerd -g /path/to/docker/
Aşağıdaki komutu yürütün
systemctl daemon-reload
systemctl restart docker
Liman işçisi dizinini kontrol etmek için komutu yürütün
docker info | grep "loop file\|Dir"
Eğer varsa / etc / sysconfig / liman işçisi Red Hat dosya veya liman işçisi 1.7.1 onay bu cevap.
Kazanan cevabın kopyala-yapıştır versiyonu :)
Bu dosyayı yalnızca şu içerikle oluşturun:
$ sudo vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
Üzerinde test Ubuntu 16.04.2 LTS
docker içinde1.12.6
graph
Daemon.json öznitelik v17.05.0 itibariyle önerilmemektedir kullanımı data-root
, bakınız, bunun yerine stackoverflow.com/a/50217666/743507
CentOS 6.5 içinde
service docker stop
mkdir /data/docker (new directory)
vi /etc/sysconfig/docker
takip eden satır ekle
other_args=" -g /data/docker -p /var/run/docker.pid"
sonra dosyayı kaydedin ve bağlantı istasyonunu yeniden başlatın
service docker start
ve depo dosyasını /data/docker
Debian / Ubuntu veya Fedora için muhtemelen diğer cevapları kullanabilirsiniz. Ancak /etc/default/docker
veya altında dosyalarınız yoksa /etc/sysconfig/docker
ve sisteminiz systemd çalıştırıyorsa, h3nrik tarafından bu yanıtı takip etmek isteyebilirsiniz . Arch kullanıyorum ve bu benim için çalışıyor.
Temel olarak, systemd'yi yeni docker görüntü konumunu bir ortam değişkeni olarak okuyacak şekilde yapılandırmanız ve bu ortam değişkenini Docker arka plan programı yürütme komut dosyasına geçirmeniz gerekir.
Tamlık için, h3nrick'in cevabı:
Eğer bir var mı /lib/systemd/system/docker.service
dosyası?
Öyleyse, Docker hizmetinin normal /etc/default/docker
dosyayı bir ortam dosyası olarak kullanması için düzenleyin:EnvironmentFile=-/etc/default/docker
.
Gelen /etc/default/docker
dosyanın sonra ekleyin DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"
.
Sonunda sadece bir systemctl daemon-reload && systemctl restart docker
.
Daha fazla bilgi için lütfen belgelere de bakınız .
Çok daha basit bir çözüm, istediğiniz gibi yumuşak bir bağlantı noktası oluşturmaktır.
link -s /var/lib/docker /mnt/whatever
Benim için CentOS 6.5 sunucumda çalışıyor.
@Mbarthelemy tarafından önerildiği gibi bu -g
, docker arka plan programı doğrudan başlatılırken seçenek üzerinden yapılabilir .
Ancak, docker bir sistem hizmeti olarak başlatılırsa, /etc/default/docker
dosyanın değiştirilmesi önerilmez . Burada bulunan bir kılavuz var .
Doğru yaklaşım /etc/docker/daemon.json
Linux (veya Mac) sistemlerinde veya %programdata%\docker\config\daemon.json
Windows'da bir dosya oluşturmaktır . Bu dosya başka bir şey için kullanılmıyorsa, aşağıdaki alanlar yeterli olmalıdır:
{
"graph": "/docker/daemon_files"
}
Bu, liman işçisinin verilerinin ısrar etmesini istediğiniz yeni konumun /docker/daemon_files
OpenSUSE Sıçraması 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'un başlangıçta boş olduğunu ve yaptığım tek şeyin docker'ın yeni dizinimi kullanmasını sağlamak için argümana eklendiğini unutmayın
Fedora 26 ve muhtemelen diğer birçok sürümde, temel klasör konumunuzu yukarıda açıklandığı gibi taşıdıktan sonra bir hatayla karşılaşabilirsiniz. Bu, özellikle / home altında bir yere taşıyorsanız doğrudur. Bunun nedeni SeLinux'un devreye girmesi ve docker konteynerinin birçok programının bu konumdan çalışmasını engellemesidir.
Kısa çözüm, -g parametresini eklediğinizde --enable-selinux seçeneğini kaldırmaktır.
AWS Ubuntu 16.04 Sunucusunda Docker görüntülerini docker dizininin altına / home / ubuntu / kaggle / üzerine monte edilmiş ayrı bir EBS'ye yerleştirdim
Başlatma komut dosyamın bu snippet'i düzgün çalıştı
# 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 sürümünde Mac kullanıcıları için sadece sadece disk görüntüsü konumunu değiştirmek tercihleri seçeneğindeki kullanıcı arayüzünden Disk Image konumuna taşımak olabilir ve (tıklayarak çalışacak Taşı Disk Image ve yeniden başlatmayı) liman işçisi. Bu yaklaşımı kullanarak liman işçisi görüntülerini saklamak için harici sabit diskimi kullanabildim.