실행할 수 없는 도커 컨테이너의 파일 시스템을 확인하는 방법은 무엇입니까?

실행할 수 없는 도커 컨테이너의 파일 시스템을 확인하는 방법은 무엇입니까?

최근에 이 컨테이너가 어떻게 작동하는지 확인하려고 했기 때문에 컨테이너를 실행하기 위해 일반적으로 수행하는 작업을 주로 수행하고 싶었습니다.

$ docker exec -it <container SHA> /bin/bash

그러나 이 경우에는 이 특정 컨테이너를 완전히 설정하고 실행할 수 없으며 실행하고 싶지도 않습니다. 나는 파일 시스템에 들어가서 그것이 어떻게 구축되었는지 탐색하고 볼 수 있기를 원합니다.

실패한 실행은 다음과 같습니다.

$ docker run prismagraphql/prisma:1.21 --name blah
Exception in thread "main" java.lang.RuntimeException: Unable to load Prisma config: java.lang.RuntimeException: No valid Prisma config could be loaded.
    at scala.sys.package$.error(package.scala:27)
    at com.prisma.config.ConfigLoader$.load(ConfigLoader.scala:40)
    at com.prisma.local.PrismaLocalDependencies.<init>(PrismaLocalDependencies.scala:36)
    at com.prisma.local.PrismaLocalMain$.delayedEndpoint$com$prisma$local$PrismaLocalMain$1(PrismaLocalMain.scala:14)
    at com.prisma.local.PrismaLocalMain$delayedInit$body.apply(PrismaLocalMain.scala:11)
    at scala.Function0.apply$mcV$sp(Function0.scala:34)
    at scala.Function0.apply$mcV$sp$(Function0.scala:34)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App.$anonfun$main$1$adapted(App.scala:76)
    at scala.collection.immutable.List.foreach(List.scala:389)
    at scala.App.main(App.scala:76)
    at scala.App.main$(App.scala:74)
    at com.prisma.local.PrismaLocalMain$.main(PrismaLocalMain.scala:11)
    at com.prisma.local.PrismaLocalMain.main(PrismaLocalMain.scala)

어떻게 해야 하나요?

답변1

이를 수행하는 한 가지 방법은 실패한 컨테이너의 새 커밋을 만든 다음 새 진입점으로 호출하는 것입니다.

컨테이너 ID 가져오기

$ docker ps -a | grep prisma:1.21 | awk '{print $1}'
96b3a1ed8ae2

이 컨테이너 ID에 대한 새 커밋을 만듭니다.

$ docker commit 29e98275723a tmpprisma
sha256:a83e0ee158d57f262230df752197a1f1e823660c42a9250e3c1ce803b41746c5

새 진입점을 사용하여 컨테이너 이미지 가져오기

$ docker run -ti --entrypoint /bin/bash tmpprisma
bash-4.4#

이제 컨테이너 내에서 사용되는 스크립트를 검사할 수 있습니다.

bash-4.4# ls -l app/bin/prisma-local
-rwxr--r--    1 root     root         16474 Apr 30  2018 app/bin/prisma-local
bash-4.4#

인용하다

관련 정보