나는 다음과 같은 dockerscript에서 docker 컨테이너를 만들었습니다.
user@servername:~$ echo "FROM ubuntu:latest" > dscript.txt
user@servername:~$
user@servername:~$ cat dscript.txt
FROM ubuntu:latest
user@servername:~$ docker build -t ubu.image - < dscript.txt
Sending build context to Docker daemon 2.048kB
Step 1/1 : FROM ubuntu:latest
---> 0ef2e08ed3fa
Successfully built 0ef2e08ed3fa
내가 지정한 이미지 이름을 사용하여 실행할 수 있습니다 ubu.image
.
user@servername:~$ docker run -it ubu.image
root@c00379445b9d:/# exit
exit
user@servername:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
user@servername:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
하지만 이를 내보내려면 커밋 해시를 사용해야 합니다.
user@servername:~$ docker export c00379445b9d > ubu.image.tar
해시 대신 컨테이너 이름을 사용해 보았으나 오류가 발생했습니다.
$ docker export ubu.image > ubu.image.tar
Error response from daemon: No such container: ubu.image
문제는 다음과 같습니다
.tar
파일로 내보내는 데 필요한 컨테이너의 최신 커밋 해시를 찾는 방법이 있습니까 ?최신 커밋 해시 없이 컨테이너를 파일로 내보낼 수 있습니까
.tar
? 그래서 어때?
답변1
컨테이너 이름이 아닌 이미지 이름을 사용하고 있으므로 ubu.image
의 매개변수에는 사용할 수 없습니다 docker export
.
컨테이너 이름을 알고 있으면 이를 직접 사용하여 내보낼 수 있습니다.
docker export <container name>
또는 해시를 얻으세요:
docker ps -aqf 'name=<container name>'
컨테이너 이름이 없으면 지정된 이미지 이름을 가진 모든 컨테이너 목록을 얻을 수 있습니다.
docker ps -aqf 'ancestor=<image name>'
지정된 이미지에서 빌드된 모든 컨테이너를 반환합니다.
label
더 나은 접근 방식은 컨테이너를 필터링하는 데 사용할 수 있도록 자체 컨테이너를 설정하는 것입니다 .
$ docker run -l foo=bar alpine sh -c 'echo 1'
1
$ docker run -l foo=baz alpine sh -c 'echo 1'
1
$ docker ps -aqf 'label=foo=bar'
d43aa7d7c854