docker 的 hello-world 这种运行完就退出的容器,有什么方法进去看看?

2022-08-09 18:04:16 +08:00
 shijingshijing

体积这么小,纯粹比较好奇想进去看看。

今天尝试了一下,不管是 attach 还是 exec 好像都不行。

4283 次点击
所在节点    程序员
30 条回复
xiaon
2022-08-10 08:24:46 +08:00
强行改变容器启动后的运行命令,一定是要工作在前台的都行,比如 sleep 600 ,让它睡眠 600 秒
pepesii
2022-08-10 09:35:04 +08:00
这个是个精简镜像,里头只有 hello 这个二进制可执行文件吧,说 sleep 和通过交互式 tty 的都不行的;
体较小的原因是因为从 stractch 镜像来的,它的代码在这儿 https://github.com/docker-library/hello-world
justNoBody
2022-08-10 09:41:58 +08:00
docker run -d --entrypoint sh IMAGE_ID -c "ping 127.0.0.1"

如果没有 ping ,就试试其他可以一直循环执行的命令
debuggerx
2022-08-10 09:44:26 +08:00
shijingshijing
2022-08-10 10:30:08 +08:00
@debuggerx #24 这个工具不错,有点意思,收藏了。

上面不管是-it, sleep, ping 都没有用的,基础镜像是 scratch 就真的是啥都没有。
krly0912
2022-08-10 14:49:03 +08:00
容器内需要有一个进程一直在运行才可以,不然会直接退出。把最后的`/bin/bash`替换为`/usr/sbin/init`
yujinchn
2022-08-10 15:01:32 +08:00
运行这句 tail -f /dev/null
jwenjian
2022-08-10 15:39:32 +08:00
dive
xiaon
2022-08-10 15:50:39 +08:00
因为这个镜像里面没有可用的 shell ,所以没法连接到容器里面,我试了下,可以这样,你把 busybox 镜像的 /bin 目录拷贝到你的宿主机上,再使用 Dockerfile 基于 hello-world 镜像,将 /bin 目录拷贝到 hello-world 镜像中的 / 目录下(bin 目录本身也要拷贝),做一个新的镜像,比如叫 hello-world2 ,这样你就可以基于 hello-world2 镜像启动一个容器,同时可以使用 -it sh 连接到容器中,其实镜像里面也没什么,主要就是一个主程序 /hello 脚本
guanzhangzhang
2022-08-10 16:18:12 +08:00
这个镜像里没 rootfs 阿,没有任何 shell 和命令,你真要搞就不应该用基础镜像是 scratch 的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/871741

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX