很多时候我们需要让docker run一直在后台运行着,比如ubuntu:latest
,然后exec做点事情;该怎么办呢?
很简单也很复杂。遇到像helloworld这样的image是完全没有办法的,人家用C编译的程序直接调用syscall显示helloworld;所以这种image是没有办法直接spin在那里的,run一下就退出。必须从代码层面来个 while (1) sleep(1);
(详见 最小自旋容器)
如果一个container可以开shell,那什么都好办,就是 docker run -d <image> sh -c 'while true; do sleep 1; done
就可以让一个没有CMD的image启动的container在后台运行了,下面就是 docker exec -it <container_id> sh
去里面做事情了。当然,shell种类很多,bash, zsh, …