Liman işçisi makine yeniden başlatma sırasında neden verileri temizliyor?


9

OSX'te Docker Toolbox kullanıyorum.

Kalıcı verileri depolamak için bir veri hacmi konteyneri oluşturdum: https://docs.docker.com/userguide/dockervolumes/#creating-and-mounting-a-data-volume-container .

Bu verilerin gerçekten konteynerde değil, boot2docker VM'sinde (docker-machine tarafından oluşturulan) depolandığını kontrol ettim, böylece devam edecek. Ancak "docker-machine restart" vm'deki bu özel verileri siler.

Neler olduğuna dair belge bulamıyorum. / Var / lib / docker içindeki verilerin korunacağını belirten bir forum gönderisi buldum, ancak bunu belirten herhangi bir resmi belge bulamadım ve ayrıca yukarıdaki kalıcı depolama kılavuzunun bu yolu kullanmadığını veya hatta verileriniz silinecek.

Bu bekleniyor mu ve eğer varsa, kalıcı verilerin saklanması için doğru yolda herhangi bir resmi belge var mı?


Düzenleme: Hatalı senario örneği ekleme

$ docker-machine ssh alt
docker@alt:~$ docker run -v /data:/var/lib/mysql --name mydata busybox sh -c "echo 'hello' > /var/lib/mysql/hello"
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
hello
docker@alt:~$ exit
$ docker-machine restart alt
Starting VM...
$ docker-machine ssh alt
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
cat: can't open '/var/lib/mysql/hello': No such file or directory

Yanıtlar:


8

Bu kesinlikle işe yarar:

$ docker-machine ssh default
docker@default:~$ docker run -v /data --name mydata busybox true
docker@default:~$ docker run --volumes-from mydata busybox sh -c "echo hello >/data/hello"
docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello
hello
docker@default:~$ exit
$ docker-machine restart default
Starting VM...
$ docker-machine ssh default
docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello
hello

Sorununuzu yeniden oluşturma adımları hakkında daha fazla bilgi verebilir misiniz?

boot2docker, aşağıdakiler hariç olmak üzere salt okunur bir dosya sistemine sahiptir (yeniden başlatıldığında silinir):

  1. Kapsayıcılar ve verileri (hacimler) - bu hakkında okuduğunuz şey /var/lib/docker
  2. Docker görüntüleri
  3. Docker yapılandırması (örn /var/lib/boot2docker/profile. Daemon bayraklarının ayarlanabileceği yerler)

Merhaba, Yanıtınızda bir düzenleme önerdim. 2. ve 4. çalıştırma komutlarında meşgul kutusu görüntüsünü belirtmek mi istediniz? Bunu yapmadan docker, istediğiniz gibi olmadığından şüphelendiğim "sh" ve "cat" adlı görüntüleri indirmeye çalışır. Yukarıda başarısız bir örnek ekleyeceğim.
Gerry

Yardımın için teşekkürler. Hem siz hem de @ mc0e bu konuda yardımcı oldu, bu yüzden size kene ve ona lütuf verdim (hem de her ikisi için bir +1). Umarım bu fuarı düşünürsünüz.
Gerry

1
Ah evet, yanlış yazılmış. İmla hataları için özür dilerim.
nathanleclaire

Özür gerekmez. Yanlış anlamadığımdan emin olmak için sadece iki kez kontrol ediyordum. Bu konuda tüm yardımlarınız için teşekkür ederiz.
Gerry

6

Boot2docker kullanmıyorum, ancak / data yeniden başlatıldığında silinirse, biriminizin depolandığı yer ( docker run -v /data:/var/lib/mysql), bu yüzden kaybolur.

Yaptığınız şey aynı zamanda hacim kalıcılığını ele almak için iki farklı deseni birleştirmektir. Kalıcılık elde etmek için kaplar, ana sistemdeki belirli bir konumdan (kalıcı olduğu varsayılır) birimler bağlayabilir veya bir veri kabıyla ilişkilendirilebilir ve bunlara monte edilebilir --volumes-from. Ana bilgisayar dosya sistemi yaklaşımı boot2docker için uygun değil gibi görünüyor ve veri birimi desenini kullanmalısınız (yalnızca).

Muhtemelen veri kabınızı -v /var/lib/mysqlyerine değil de oluşturmalısınız -v /data:/var/lib/mysql.


-V bayrağını kullanarak bir birim oluşturmak ve daha sonra --volumes-from kullanarak bu kaptaki birimleri kullanmak tam olarak belgelerin gösterdiği şeydir : docs.docker.com/userguide/dockervolumes/… -v / location, bunun / var / lib / docker / volumes'a göre olması gerektiğini bilir, ardından iki nokta üst üste eklemek bunu değiştirmemelidir. En azından bu bilinçsizdir. -v / var / lib / mysql! = -v / var / lib / mysql: / var / lib / mysql Ayrıca mysql-docker belgelerinin de güncellenmesi gerektiği anlaşılıyor
Gerry

Yardımın için teşekkürler. Hem sen hem de @nathanleclaire bu konuda yardımcı oldum, bu yüzden sana ödül verdim (daha değerli olduğu gibi) ve nathanleclaire'e kene verdim (her ikisi için de +1). Umarım bunun adil olduğunu düşünürsün.
Gerry

@Gerry Kesinlikle bir birim oluşturmak ve daha sonra --volumes-from ile kullanmanız önerilir. Geçici / veriyi kabınıza monte etmek değil.
mc0e

Evet bela bilmiyordum / yeniden başlayana kadar veriler geçici oldu.
Gerry

0

Ben xhyve vm kullanan mac beta için docker kullanıyorum unutmayın.

/ Var / lib / boot2docker içeriği makinenin yeniden başlatılması arasında kalıcı olacaktır. Yani belirli dosyaların vm üzerinde kullanılabilir olmasını istiyorsanız bu dizine koyun.

Docker kapsayıcılarını çalıştırmak için farklı bir konumda erişilebilir olmalarını istiyorsanız, / var / lib / boot2docker / profile öğesine aşağıdakileri ekleyebilirsiniz:

mkdir -p /desired/path
ln -s /var/lib/boot2docker/your.file /desire/path/your.file

Ana bilgisayar dosyanızdaki ekstra değerler gibi vm yeniden başlatmaları arasında devam edecek sistem dosyalarına başka yapılandırma eklemek isterseniz, / var / lib / boot2docker / profile için aşağıdaki gibi bir komut ekleyebilirsiniz:

echo '127.0.0.1 your.domain.com' >> /etc/hosts

Umarım yardımcı olur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.