Saya memiliki wadah Docker yang saya buat hanya dengan menginstal Docker di Ubuntu dan melakukan:
sudo docker run -i -t ubuntu /bin/bash
Saya segera mulai menginstal Java dan beberapa alat lainnya, menghabiskan waktu dengannya dan menghentikan wadah
exit
Kemudian saya ingin menambahkan volume dan menyadari bahwa ini tidak semudah yang saya kira. Jika saya gunakan sudo docker -v /somedir run ...
maka saya akan berakhir dengan wadah baru yang baru, jadi saya harus menginstal Java dan melakukan apa yang telah saya lakukan sebelumnya hanya untuk sampai pada sebuah wadah dengan volume terpasang.
Semua dokumentasi tentang pemasangan folder dari host tampaknya menyiratkan bahwa pemasangan volume adalah sesuatu yang dapat dilakukan saat membuat wadah. Jadi satu-satunya pilihan saya harus menghindari mengkonfigurasi ulang wadah baru dari awal adalah untuk mengkomit wadah yang sudah ada ke repositori dan menggunakannya sebagai dasar yang baru saat memasang volume.
Apakah ini satu-satunya cara untuk menambahkan volume ke wadah yang ada?
docker
tag adalah 34k + , yang jauh lebih dari dua situs tersebut stackoverflow.com/questions/tagged/dockerJawaban:
Anda dapat mengkomit wadah Anda yang sudah ada (yaitu membuat gambar baru dari perubahan wadah) dan kemudian menjalankannya dengan mount baru Anda.
Contoh:
Jika semuanya baik-baik saja, hentikan wadah lama Anda, dan gunakan yang baru ini.
Itu dia :)
sumber
newnameofcontainer
bahwa ini mungkin harus dinamainew_image_name
- karenadocker commit
membuat gambar baru di sistem Anda. Kemudian di berikut ini ketika Anda melakukandocker run
Anda benar-benar menggunakan nama gambar yang Anda ingin menjalankan wadah baru. Di atas berfungsi tetapi hanya ingin menjelaskan kepada orang lain bahwa placeholder newnameofcontainer di atas sebenarnya adalah nama untuk gambar baru. Terima kasih! jawaban yang luar biasa. oh, Anda dapat melihat gambar yang baru dibuat dari perintah commit buruh pelabuhan pertama menggunakandocker image ls
docker run -v /srv/a:/tmp ubuntu:14.04
itu baik.Kami tidak memiliki cara untuk menambahkan volume dalam menjalankan wadah, tetapi untuk mencapai tujuan ini Anda dapat menggunakan perintah di bawah ini:
Salin file / folder antara wadah dan sistem file lokal: -
Untuk referensi lihat:
https://docs.docker.com/engine/reference/commandline/cp/
sumber
Saya telah berhasil memasang
/home/<user-name>
folder host saya ke/mnt
folder wadah yang ada (tidak berjalan). Anda dapat melakukannya dengan cara berikut:Buka file konfigurasi yang terkait dengan wadah yang dihentikan, yang dapat ditemukan di
/var/lib/docker/containers/99d...1fb/config.v2.json
(mungkinconfig.json
untuk versi buruh pelabuhan yang lebih tua).Cari
MountPoints
bagian yang kosong dalam kasus saya:"MountPoints":{}
. Selanjutnya ganti konten dengan sesuatu seperti ini (Anda dapat menyalin konten yang tepat dari wadah lain dengan pengaturan yang tepat):atau sama (diformat):
service docker restart
Ini berfungsi untuk saya dengan Ubuntu 18.04.1 dan Docker 18.09.0
sumber
systemctl stop docker.service
2. Editconfig.v2.json
:vim <(jq . /var/lib/docker/containers/<container-ID>/config.v2.json)
3. Simpan pembaruan ke file::w config.v2.json
4. Keluar vim::q!
5. Perbarui file yang ada:jq -c . config.v2.json > /var/lib/docker/containers/<container-ID>/config.v2.json
6. Mulai mesin buruh pelabuhan:systemctl start docker.service
7. Mulai wadah jika perlu :docker start <container-name/ID>
8. Nikmati :-)service docker restart
. Saya mencoba untukdocker restart <container>
kemudian konfigurasi baru tidak diambil, dan itu ditimpa oleh konfigurasi lama.jq
akan membantu cukup mencetak JSON sehingga lebih dapat diedit:cat config.v2.json | jq . > config.json
Jérôme Petazzoni memiliki posting blog yang cukup menarik tentang cara Melampirkan volume ke wadah saat sedang berjalan . Ini bukan sesuatu yang dibangun di Docker di luar kotak, tetapi mungkin untuk dicapai.
Saat ia juga menunjukkan
YMMV
sumber
Sayangnya opsi sakelar untuk memasang volume hanya ditemukan dalam
run
perintah.docker run --help
-v, --volume list Bind mount a volume (default [])
Ada cara Anda dapat mengatasi ini sehingga Anda tidak perlu menginstal ulang aplikasi yang sudah Anda siapkan di wadah Anda.
docker container export -o ./myimage.docker mycontainer
docker import ./myimage.docker myimage
docker run -i -t -v /somedir --name mycontainer myimage /bin/bash
sumber
docker container
bukan perintah yang valid pada 1.11.2 (yang merupakan versi terbaru yang didukung oleh Synology pada tulisan ini). Saya tidak dapat menemukan dokumen yang mengatakan kapan ditambahkan. Dalam hal ini perintah pertama adalahdocker export -o ./myimage.docker mycontainer
.Catatan untuk menggunakan wadah Docker Windows setelah saya harus mencari masalah ini untuk waktu yang lama!
Kondisi:
Masalah:
Solusi seperti yang sebagian dijelaskan di sini:
docker run -d -p 1433:1433 -e sa_password=<STRONG_PASSWORD> -e ACCEPT_EULA=Y microsoft/mssql-server-windows-developer
docker exec -it <CONTAINERID> cmd.exe
mkdir DirForMount
docker container stop <CONTAINERID>
docker commit <CONTAINERID> <NEWIMAGENAME>
docker container rm <CONTAINERID>
docker run -d -p 1433:1433 -e sa_password=<STRONG_PASSWORD> -e ACCEPT_EULA=Y -v C:\DirToMount:C:\DirForMount <NEWIMAGENAME>
Setelah ini saya memecahkan masalah ini pada kontainer windows buruh pelabuhan.
sumber
Cara terbaik adalah menyalin semua file dan folder di dalam direktori di sistem file lokal Anda dengan:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
SRC_PATH
ada di wadahDEST_PATH
ada di localhostKemudian lakukan
docker-compose down
pasang volume ke yang samaDEST_PATH
dan jalankan wadah Docker dengan menggunakandocker-compose up -d
Tambahkan volume dengan mengikuti
docker-compose.yml
sumber