Soru Yeniden içe aktarılan docker görüntüsünden / kapsayıcısından “Hiçbir komut belirtilmemiş”


Bir makineden bir docker kabını almaya çalışıyorum ve başka bir bilgisayarda çalıştırıyorum ve bu hatayla karşılaşıyorum: "Arka plandaki hata yanıtı: Hiçbir komut belirtilmedi".

Aşağıda, sorunu gösteren basitleştirilmiş bir örnek verilmiştir:

docker --version
Docker version 1.10.1, build 9e83765
docker pull ubuntu
docker run --name u1 -dit ubuntu:latest
docker export -o exported u1
docker stop u1
docker rm u1
docker import exported ubuntu:imported
docker run --name u1 -dit ubuntu:imported
docker: Error response from daemon: No command specified.

Bu örnekte, önce bir görüntü (ubuntu) çeker ve başarıyla oluştur / çalıştır u1 ondan. Sonra o konteynırı bir dosyaya aktarıyoruz (exported), kabı durdurun / kaldırın, dosyayı yeni bir görüntüye alın (ubuntu:imported) ve yeni bir konteyner çalıştırmayı deneyin. Başarısız.

Birisi nasıl çalışacağını açıklayabilir mi?


5
2018-02-15 05:09


Menşei


Teşekkürler bayım! Günümü ve bir sürü başımı bana kurtardın: D - Julian Xhokaxhiu
Lütfen "güncellemenizi" bir "@" mesajını yapın. Muhtemel yükseltmelerden puan alacaksınız ve herkes daha okunabilir içerik alacak. :) - Greg Dubicki


Cevaplar:


docker export konteyner hakkında her şeyi dışa aktarmaz - sadece dosya sistemi. Bu nedenle, dökümü yeni bir docker görüntüsüne geri aktarırken, içeriği yeniden oluşturmak için ek bayrakların belirtilmesi gerekir.

Örneğin, orijinal kapsayıcı düzgün çalışıyorsa, görüntüyü oluşturmak için kullanılan Dockerfile öğesi olduğundan CMD ["/usr/bin/supervisord"] İçinde o zaman çöplüğünüzü şu şekilde içe aktarın:

docker import \
--change 'CMD ["/usr/bin/supervisord"]' \
path/to/dump.tar imagename:tagname

5
2017-08-18 09:42





Bir kabı dışa aktardığınızda, görüntü katmanları ve meta verileri içeren kendi geçmişini kaybettiniz. Yani konteyneriniz pid durumlarını kaybetti.

Her konteyner bir başlangıç ​​(kök) işlemine sahip olmalıdır. Docker dosyası üzerinde bash olarak varsayılan giriş noktasını seçiyorsunuz. [Düzenlendi] Ben bile geçersiz kılmaz sanırım ubuntu baz görüntüsünde tanımlanmamış, varsayılan kullanır. Yani ilk sürecinizi cmd komutuyla başlatmalısınız. Bence hata yok. Reusablity için dockerfile bir özelliktir.


1
2018-04-11 21:11



Sadece orijinal soruna geçici çözümde giriş noktasını geçersiz kılıyorum. Dışa aktarma / içe aktarma sırasında hiçbir şey geçersiz kılmıyor. - Greendrake
merhaba @DrakeES cevabım güncellendi. Bir konteyneri ihraç ederken ne olduğunu açıklarım. - pmoksuz


Bu ek adımlar ile çalıştım:

  1. Dockerfile aşağıdaki gibi oluşturun:

    FROM ubuntu:imported
    ENTRYPOINT bash
    
  2. Yeni resim oluştur:

    docker build -t ubuntu:importedwithdockerfile .
    
  3. Şimdi koşacak:

    docker run --name u1 -dit ubuntu:importedwithdockerfile
    

Bununla birlikte, sadece ihraç edilen ve daha sonra içe aktarılan görüntünün neden hemen işe yaramadığı hala net değil. Bu bir hata mı?


0
2017-10-12 11:32





Docker'ı dışa aktarmaya ve içe aktarmaya çalışırken bu hatayı aldım microsoft/mssql-server-linux.

https://hub.docker.com/r/microsoft/mssql-server-linux/

İhracat ve ithalat komutları:

docker export --output "C:\Users\oscar\Desktop\sqlTestMS.tar" msSQL

docker import "C:\Users\oscar\Desktop\sqlTestMS.tar" mssql

Ancak, onu çalıştırmak için komut bulamadık. Çözüm, dışa aktarma makinesindeki tüm kapsayıcıları listeliyor ve komut çalıştırmasına bakıyordu.

docker ps

enter image description here

Buradan doğru komutu nasıl çalıştıracağımızı bulabiliriz:

docker run --name msSQL -p 1401:1433 -d mssql:latest /opt/mssql/bin/sqlservr

0
2018-05-17 02:58





kullanabilirsiniz docker load arşiv dosyasından görüntüleri yüklemek için komut. Bu komut görüntü dosyasını içe aktarır ve birlikte arşivlenir.


-1



Bu durumda "arşiv" dosyası nedir ve nasıl oluşturulur? - Greendrake
@Greendrake docker load ve docker save konteynır görüntülerinde (konteynerlerin oluşturulduğu) çalışır, docker import ve docker export kaplarda çalışın. - Michael Hampton♦