Không có lệnh nào được chỉ định


16

Tôi đang cố gắng lấy một container docker từ một máy và chạy nó trên một máy khác và gặp lỗi này: " Phản hồi lỗi từ daemon: Không có lệnh nào được chỉ định ".

Dưới đây là một ví dụ đơn giản cho thấy vấn đề:

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.

Trong ví dụ đó, trước tiên chúng ta kéo một hình ảnh (ubfox) và tạo / chạy thành công container u1từ nó. Sau đó, chúng ta xuất container đó sang một tệp ( exported), dừng / xóa vùng chứa, nhập tệp vào một hình ảnh mới ( ubuntu:imported) và cố gắng chạy một vùng chứa mới từ nó. Nó thất bại.

Câu trả lời:


16

docker exportkhông xuất mọi thứ về container - chỉ là hệ thống tập tin. Vì vậy, khi nhập kết xuất trở lại vào hình ảnh docker mới, các cờ bổ sung cần được chỉ định để tạo lại bối cảnh.

Ví dụ: nếu bộ chứa ban đầu đang chạy tốt vì Dockerfile được sử dụng để tạo hình ảnh của nó có CMD ["/usr/bin/supervisord"]trong đó, thì hãy nhập kết xuất của bạn theo cách này:

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

2
Bạn có thể chạy docker inspect imagename:tagnameso sánh bản gốc và bản nhập khẩu. Tôi không có may mắn với import/ export--change, mặc dù mọi thứ hoạt động tốt với save/ load.
Earcam 18/03/19

2

Có lỗi này khi cố gắng xuất và nhập docker microsoft/mssql-server-linux.

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

Các lệnh xuất nhập khẩu:

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

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

Tuy nhiên chúng tôi không thể tìm thấy lệnh để chạy nó. Giải pháp là liệt kê tất cả các container trên máy xuất và nhìn vào lệnh đã chạy.

docker ps

nhập mô tả hình ảnh ở đây

Từ đó chúng ta có thể tìm ra cách chạy lệnh chính xác:

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

1

Khi bạn xuất một container, nó sẽ mất lịch sử chứa các lớp hình ảnh và dữ liệu meta. Vì vậy, container của bạn bị mất trạng thái pid của nó.

Mỗi container nên có một quá trình (root) ban đầu. Bạn đang giám sát điểm nhập mặc định trên dockerfile dưới dạng bash. [đã chỉnh sửa] Tôi nghĩ thậm chí bạn không ghi đè nó sử dụng mặc định, không được xác định trong hình ảnh cơ sở Ubuntu. Vì vậy, bạn nên bắt đầu quá trình ban đầu của bạn với lệnh cmd. Tôi nghĩ rằng không có lỗi. Nó là một tính năng dockerfile cho tái sử dụng.


Tôi chỉ ghi đè điểm vào trong cách giải quyết cho vấn đề ban đầu. Không có gì bị ghi đè trong quá trình xuất / nhập.
Greendrake

hi @DrakeES câu trả lời của tôi vừa được cập nhật. Tôi giải thích những gì xảy ra khi bạn xuất một container.
pmoksuz

0

Làm cho nó hoạt động với các bước bổ sung sau:

  1. Tạo Dockerfile như sau:

    FROM ubuntu:imported
    ENTRYPOINT bash
    
  2. Xây dựng hình ảnh mới:

    docker build -t ubuntu:importedwithdockerfile .
    
  3. Bây giờ nó sẽ chạy:

    docker run --name u1 -dit ubuntu:importedwithdockerfile
    

Tuy nhiên, vẫn chưa rõ lý do tại sao chỉ đơn giản là xuất và sau đó hình ảnh đã nhập không hoạt động ngay lập tức. Đây có phải là một lỗi?


-1

bạn có thể sử dụng docker loadlệnh để tải hình ảnh từ tệp lưu trữ. Lệnh này sẽ nhập tệp hình ảnh và lập luận với nhau.


1
Tập tin "archive" trong trường hợp này là gì và làm thế nào để tạo nó?
Greendrake

2
@Greendrake docker loaddocker savehoạt động trên hình ảnh container (từ đó container được tạo), trong khi docker importdocker exporthoạt động trên container.
Michael Hampton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.