다시 가져온 도커 이미지 / 컨테이너에서 "지정된 명령이 없습니다"


16

한 컴퓨터에서 도커 컨테이너를 가져 와서 다른 컴퓨터에서 실행하려고 시도하고 다음 오류가 발생했습니다. " 데몬의 오류 응답 : 명령이 지정되지 않았습니다 ".

아래는 문제를 보여주는 간단한 예입니다.

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.

이 예에서는 먼저 이미지 (우분투)를 u1가져 와서 컨테이너 를 성공적으로 생성 / 실행 합니다. 그런 다음 해당 컨테이너를 파일 ( exported) 로 내보내고 컨테이너를 중지 / 제거하고 파일을 새 이미지 ( ubuntu:imported) 로 가져 와서 새 컨테이너를 실행합니다. 실패합니다.

답변:


17

docker export컨테이너에 관한 모든 것을 내 보내지 않고 파일 시스템 만 내보내십시오. 따라서 덤프를 새 도커 이미지로 다시 가져올 때 컨텍스트를 다시 작성하려면 추가 플래그를 지정해야합니다.

예를 들어, 이미지를 작성하는 데 사용 된 Dockerfile에 원래 컨테이너가 제대로 실행 된 경우 CMD ["/usr/bin/supervisord"]덤프를 다음과 같이 가져 오십시오.

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

2
docker inspect imagename:tagname원본과 가져온 원본을 비교하여 실행할 수 있습니다 . 내가 가진 운이 없었다 import/ export--change다 함께 잘 작동하지만, save/ load.
earcam

2

docker를 내보내고 가져올 때이 오류가 발생했습니다 microsoft/mssql-server-linux.

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

내보내기 및 가져 오기 명령 :

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

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

그러나 실행 명령을 찾을 수 없습니다. 솔루션은 내보내기 시스템의 모든 컨테이너를 나열하고 명령 실행을보고있었습니다.

docker ps

여기에 이미지 설명을 입력하십시오

여기에서 올바른 명령을 실행하는 방법을 찾을 수 있습니다.

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

1

컨테이너를 내 보내면 이미지 레이어와 메타 데이터가 포함 된 자체 기록이 손실됩니다. 따라서 컨테이너가 pid 상태를 잃었습니다.

모든 컨테이너에는 초기 (루트) 프로세스가 있어야합니다. dockerfile의 기본 진입 점을 bash로 무시합니다. [편집] 우분투 기본 이미지에 정의되지 않은 default를 사용하여 재정의하지 않더라도 생각합니다. 따라서 cmd 명령으로 초기 프로세스를 시작해야합니다. 나는 버그가 없다고 생각합니다. 재사용 성을위한 dockerfile 기능입니다.


해결 방법의 진입 점을 원래 문제로 재정의하고 있습니다. 내보내기 / 가져 오기 중에는 아무것도 무시되지 않습니다.
Greendrake

안녕하세요 @DrakeES 내 대답이 방금 업데이트되었습니다. 컨테이너를 내보낼 때 어떤 일이 발생하는지 설명합니다.
pmoksuz

0

다음과 같은 추가 단계로 작업했습니다.

  1. 다음과 같이 Dockerfile을 작성하십시오.

    FROM ubuntu:imported
    ENTRYPOINT bash
    
  2. 새로운 이미지를 만드십시오 :

    docker build -t ubuntu:importedwithdockerfile .
    
  3. 이제 실행됩니다 :

    docker run --name u1 -dit ubuntu:importedwithdockerfile
    

그러나 왜 단순히 내 보낸 다음 가져온 이미지가 바로 작동하지 않는지 여전히 확실하지 않습니다. 이것이 버그입니까?


-1

docker load명령을 사용 하여 아카이브 파일에서 이미지를로드 할 수 있습니다 . 이 명령은 이미지 파일과 인수를 함께 가져옵니다.


1
이 경우 "아카이브"파일이란 무엇이며 어떻게 작성합니까?
Greendrake

2
@Greendrake docker loaddocker save(콘테이너가 생성되는) 이미지 컨테이너에 작동 동안 docker importdocker export컨테이너에 동작한다.
Michael Hampton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.