Docker
如何檢查無法執行的 docker 容器的文件系統?
我最近試圖檢查這個容器是如何工作的,所以我想做我通常對正在執行的容器做的事情,主要是:
$ 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)
我怎樣才能做到這一點?
執行此操作的一種方法是創建失敗容器的新送出,然後使用新入口點呼叫它。
例子
獲取容器 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#
參考