Dari apa yang saya tahu, gambar buruh pelabuhan diinstal ke /var/lib/dockersaat mereka ditarik. Apakah ada cara untuk mengubah lokasi ini, seperti volume yang dipasang seperti /mnt?
Dari apa yang saya tahu, gambar buruh pelabuhan diinstal ke /var/lib/dockersaat mereka ditarik. Apakah ada cara untuk mengubah lokasi ini, seperti volume yang dipasang seperti /mnt?
Jawaban:
Dengan versi Docker terbaru, Anda akan menetapkan nilai data-rootparameter ke jalur kustom Anda, di /etc/docker/daemon.json
(sesuai dengan https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file ).
Dengan versi yang lebih lama, Anda dapat mengubah direktori basis penyimpanan Docker (tempat penampung dan gambar) menggunakan -gopsi saat memulai daemon Docker. (periksa docker --help). Anda dapat memiliki pengaturan ini diterapkan secara otomatis ketika Docker mulai dengan menambahkannya ke / etc / default / docker
-gopsi ini ke / etc / defaults / docker daripada memodifikasi file Upstart, lihat jawaban saya.
DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
graphatribut dalam daemon.json sudah ditinggalkan pada v17.05.0, menggunakan data-rootgantinya, lih stackoverflow.com/a/50217666/743507
Mengikuti saran dari komentar saya menggunakan dokumentasi Docker systemd untuk meningkatkan jawaban ini. Prosedur di bawah ini tidak memerlukan reboot dan jauh lebih bersih.
Pertama-tama buat direktori dan file untuk konfigurasi khusus:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
Untuk versi buruh pelabuhan sebelum 17.06-ce tempel:
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"
Untuk buruh pelabuhan setelah 17.06-ce tempel:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"
daemon.jsonSaya baru-baru ini mencoba prosedur di atas dengan 17.09-ce pada Fedora 25 dan sepertinya tidak berhasil. Alih-alih modifikasi sederhana dalam /etc/docker/daemon.jsonmelakukan trik:
{
"graph": "/mnt",
"storage-driver": "overlay"
}
Meskipun demikian Anda harus memuat ulang konfigurasi dan memulai kembali Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
Untuk mengonfirmasi bahwa Docker telah dikonfigurasi ulang:
docker info|grep "loop file"
Dalam versi terbaru (17.03) diperlukan perintah yang berbeda:
docker info|grep "Docker Root Dir"
Output akan terlihat seperti ini:
Data loop file: /mnt/devicemapper/devicemapper/data
Metadata loop file: /mnt/devicemapper/devicemapper/metadata
Atau:
Docker Root Dir: /mnt
Maka Anda dapat dengan aman menghapus penyimpanan Docker lama:
rm -rf /var/lib/docker
docker infoPernyataan mungkin usang. Di Ubuntu 16.04, pemeriksaan untuk konfigurasi ulang adalah sudo docker info | grep "Docker Root Dir". Kalau tidak, jawaban yang baik, harus yang diterima;)
Docker Root Dir: /"/mnt"ketika Anda menjalankan docker info|grep "Docker Root Dir", Anda harus mengganti --data-root="/mnt"ke --data-root=/mntdalam filedocker-storage.conf
Untuk versi buruh pelabuhan yang baru kita perlu menggunakan data-rootseperti yang graphsudah usang di v17.05.0: dokumen yang sudah tidak digunakan lagi
Edit /etc/docker/daemon.json(jika tidak ada, buat) dan sertakan:
{
"data-root": "/new/path/to/docker-data"
}
Kemudian restart Docker dengan:
sudo systemctl daemon-reload
sudo systemctl restart docker
Karena saya belum menemukan instruksi yang benar untuk melakukan ini di Fedora (EDIT: orang menunjuk komentar bahwa ini juga harus bekerja pada CentOS dan Suse) (/ etc / default / docker tidak digunakan di sana), saya menambahkan jawab di sini:
Anda harus mengedit / etc / sysconfig / docker , dan menambahkan opsi -g di variabel OPTIONS. Jika ada lebih dari satu opsi, pastikan Anda menyertakannya di "". Dalam kasus saya, file itu berisi:
OPTIONS=--selinux-enabled
jadi itu akan menjadi
OPTIONS="--selinux-enabled -g /mnt"
Setelah restart ( systemctl restart docker), Docker harus menggunakan direktori baru
Jangan gunakan tautan simbolis untuk memindahkan folder buruh pelabuhan ke / mnt (misalnya). Ini dapat menyebabkan masalah dengan perintah docker rm .
Lebih baik gunakan Opsi -g untuk buruh pelabuhan. Di Ubuntu Anda dapat mengaturnya secara permanen di /etc/default/docker.io. Tingkatkan atau ganti Baris DOCKER_OPTS.
Berikut sebuah contoh: `DOCKER_OPTS =" - g / mnt / di suatu tempat / yang lain / buruh pelabuhan / "
docker rmketika menggunakan symlink?
Ubuntu 16.04 stackoverflow.com/a/30219552/977622 agar bisa berfungsi
Hentikan layanan buruh pelabuhan
sudo systemctl stop docker
Pindahkan direktori buruh pelabuhan yang ada ke lokasi baru
sudo mv /var/lib/docker/ /path/to/new/docker/
Buat tautan simbolis
sudo ln -s /path/to/new/docker/ /var/lib/docker
Mulai layanan buruh pelabuhan
sudo systemctl start docker
sudo ln -s /path/to/new/docker/ /var/lib/docker
Solusi ini berfungsi pada Red Hat 7.2 & Docker 1.12.0
Edit file /lib/systemd/system/docker.service di editor teks Anda.
tambahkan -g / path / ke / buruh pelabuhan / di akhir direktif ExecStart . Baris lengkapnya akan terlihat seperti ini.
ExecStart=/usr/bin/dockerd -g /path/to/docker/
Jalankan perintah di bawah ini
systemctl daemon-reload
systemctl restart docker
Jalankan perintah untuk memeriksa direktori buruh pelabuhan
docker info | grep "loop file\|Dir"
Jika Anda memiliki file / etc / sysconfig / docker di Red Hat atau docker 1.7.1 periksa jawaban ini .
Salin dan tempel versi jawaban pemenang :)
Buat file ini hanya dengan konten ini:
$ sudo vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
Diuji di Ubuntu 16.04.2 LTSdalam buruh pelabuhan1.12.6
graphatribut dalam daemon.json sudah ditinggalkan pada v17.05.0, menggunakan data-rootgantinya, lih stackoverflow.com/a/50217666/743507
Dalam CentOS 6.5
service docker stop
mkdir /data/docker (new directory)
vi /etc/sysconfig/docker
tambahkan baris berikut
other_args=" -g /data/docker -p /var/run/docker.pid"
kemudian simpan file dan mulai buruh pelabuhan lagi
service docker start
dan akan membuat file repositori di /data/docker
Untuk Debian / Ubuntu atau Fedora, Anda mungkin dapat menggunakan jawaban lain. Tetapi jika Anda tidak memiliki file di bawah /etc/default/dockeratau /etc/sysconfig/docker, dan sistem Anda menjalankan systemd, Anda mungkin ingin mengikuti jawaban ini oleh h3nrik . Saya menggunakan Arch, dan ini berfungsi untuk saya.
Pada dasarnya, Anda perlu mengkonfigurasi systemd untuk membaca lokasi gambar buruh pelabuhan baru sebagai variabel lingkungan, dan meneruskan variabel lingkungan ke dalam skrip pelaksanaan daemon Docker.
Untuk kelengkapan, berikut adalah jawaban h3nrick:
Apakah Anda memiliki /lib/systemd/system/docker.service file?
Jika demikian, edit sehingga layanan Docker menggunakan yang biasa /etc/default/dockersebagai file lingkungan:EnvironmentFile=-/etc/default/docker .
Dalam /etc/default/dockerfile tersebut lalu tambahkan DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images".
Pada akhirnya lakukan saja systemctl daemon-reload && systemctl restart docker.
Untuk informasi lebih lanjut, silakan melihat dokumentasi .
Solusi yang lebih sederhana adalah membuat titik tautan lunak ke apa pun yang Anda inginkan, seperti
link -s /var/lib/docker /mnt/whatever
Ini bekerja untuk saya di server CentOS 6.5 saya.
Seperti yang disarankan oleh @mbarthelemy, ini dapat dilakukan melalui -g opsi ketika memulai daemon buruh pelabuhan secara langsung.
Namun, jika buruh pelabuhan sedang memulai sebagai layanan sistem, tidak disarankan untuk memodifikasi /etc/default/dockerfile. Ada pedoman untuk ini yang terletak di sini .
Pendekatan yang benar adalah membuat /etc/docker/daemon.jsonfile di sistem Linux (atau Mac) atau %programdata%\docker\config\daemon.jsondi Windows. Jika file ini tidak digunakan untuk hal lain, bidang berikut ini sudah cukup:
{
"graph": "/docker/daemon_files"
}
Ini dengan asumsi lokasi baru tempat Anda ingin memiliki data tetap ada /docker/daemon_files
Pada 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"
Perhatikan bahwa DOCKER_OPTS pada awalnya kosong dan yang saya lakukan hanyalah menambahkan argumen untuk membuat buruh pelabuhan menggunakan direktori baru saya
Pada Fedora 26 dan mungkin banyak versi lain, Anda mungkin mengalami kesalahan setelah memindahkan lokasi folder dasar Anda seperti dijelaskan di atas. Ini terutama benar jika Anda memindahkannya ke suatu tempat di bawah / rumah. Ini karena SeLinux menendang dan mencegah wadah buruh pelabuhan menjalankan banyak programnya dari bawah lokasi ini.
Solusi singkatnya adalah menghapus opsi --enable-selinux saat Anda menambahkan parameter -g.
Pada AWS Ubuntu 16.04 Server saya meletakkan gambar Docker pada EBS terpisah, dipasang di / home / ubuntu / kaggle /, di bawah dir docker
Cuplikan skrip inisialisasi saya ini berfungsi dengan benar
# 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
Untuk pengguna Mac dalam versi 17.06.0-ce-mac19, Anda cukup memindahkan lokasi Disk Image dari antarmuka pengguna dalam opsi preferensi. Ubah saja lokasi gambar disk dan itu akan berfungsi (dengan mengklik Pindahkan disk image ) dan restart buruh pelabuhan. Dengan menggunakan pendekatan ini saya dapat menggunakan hardisk eksternal saya untuk menyimpan gambar buruh pelabuhan.
