我最近试图检查这个容器是如何工作的,所以我想做我通常为正在运行的容器做的事情,主要是:
$ 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#