"Tidak ada perintah yang ditentukan" dari gambar/wadah docker yang diimpor kembali

Saya mencoba mengambil wadah buruh pelabuhan dari satu mesin dan menjalankannya di mesin lain dan mengalami kesalahan ini: "Respon kesalahan dari daemon: tidak ada perintah yang ditentukan".

Di bawah ini adalah contoh sederhana yang menunjukkan masalah:

docker --versionDocker version 1.10.1, build 9e83765docker pull ubuntudocker run --name u1 -dit ubuntu:latestdocker export -o exported u1docker stop u1docker rm u1docker import exported ubuntu:importeddocker run --name u1 -dit ubuntu:importeddocker: Error response from daemon: No command specified.

Dalam contoh itu, pertama-tama kita menarik gambar (ubuntu) dan berhasil membuat / menjalankan wadah u1 dari itu. Kemudian kita mengekspor wadah itu ke file (exported), Berhenti / Hapus wadah, impor file ke gambar baru (ubuntu:imported) dan coba jalankan wadah baru darinya. Gagal.

docker export Tidak mengekspor segala sesuatu tentang wadah — hanya filesystem. Jadi, saat mengimpor dump kembali ke gambar docker baru, Flag tambahan perlu ditentukan untuk membuat ulang konteks.

Misalnya, jika wadah asli berjalan dengan baik karena Dockerfile yang digunakan untuk membuat gambarnya memiliki CMD ["/usr/bin/supervisord"] di dalamnya, lalu impor dump Anda dengan cara ini:

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

Anda dapat menggunakan docker load perintah untuk memuat gambar dari file arsip .perintah ini akan mengimpor file gambar dan args bersama-sama.

Mendapat kesalahan ini saat mencoba mengekspor dan mengimpor buruh pelabuhan microsoft/mssql-server-linux.

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

Perintah untuk ekspor dan impor:

docker export --output "C:\Users\oscar\Desktop\sqlTestMS.tar" msSQLdocker import "C:\Users\oscar\Desktop\sqlTestMS.tar" mssql

Namun kami tidak dapat menemukan perintah untuk menjalankannya. Solusinya adalah mencantumkan semua kontainer pada mesin pengekspor dan melihat perintah yang dijalankan.

docker ps

enter image description here

Dari sana kita bisa mengetahui cara menjalankan perintah yang benar:

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

Ketika Anda mengekspor wadah itu kehilangan sejarah sendiri yang berisi lapisan gambar dan meta data. Jadi kontainer Anda kehilangan status pid-nya.

Setiap wadah harus memiliki proses awal (root). Anda mengesampingkan titik masuk default pada dockerfile sebagai bash. [diedit] saya pikir bahkan Anda tidak menimpanya menggunakan default , tidak didefinisikan dalam gambar dasar ubuntu. Jadi Anda harus memulai proses awal Anda dengan perintah cmd. Saya pikir tidak ada bug. Ini adalah fitur dockerfile untuk reusablity.

jika menggunakan import

docker save nginx:alpine | ssh rmeote-host docker import -sha256:f6098fc18511abbbfe9e52ed0d0ccc1fbe4f7b018ee1cd85392999aa92ebba1b# we see errorsdocker container run -d -p 2020:80  nginx:alpinedocker: Error response from daemon: No command specified.See 'docker run --help'.

jika menggunakan load

docker save nginx:alpine | ssh remote-host "cat - | docker load"Loaded image: nginx:alpinedocker container run --name nginx -dp 2020:80 nginx:alpine7cc8836bef1e276f8aa986a09186e9e227542be3b094b082b9ab1f6d3c290a99docker psCONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS        PORTS                                   NAMES7cc8836bef1e   nginx:alpine   "/docker-entrypoint.…"   2 seconds ago   Up 1 second   0.0.0.0:2020->80/tcp, :::2020->80/tcp   nginx

Mendapatkannya bekerja dengan langkah-langkah tambahan:

  1. Buat Dockerfile sebagai berikut:

    FROM ubuntu:importedENTRYPOINT bash
  2. Membangun citra baru:

    docker build -t ubuntu:importedwithdockerfile .
  3. Sekarang akan berjalan:

    docker run --name u1 -dit ubuntu:importedwithdockerfile

Namun, masih belum jelas mengapa gambar yang diekspor dan kemudian diimpor tidak langsung berfungsi. Apakah ini bug?