为何执行两次docker run nginx -it仅显示一个运行中的容器?
问题原因及解决办法
核心原因
你遇到的情况是docker run nginx -it中的-it参数导致的:
-i:保持容器标准输入打开-t:为容器分配伪终端(TTY)
Nginx镜像默认启动命令是nginx -g daemon off;,让Nginx以前台进程运行。第一次执行docker run nginx -it时,容器会绑定到当前终端:
- 若你在这个终端按下
Ctrl+C,会直接终止前台的Nginx进程,容器随之停止,只能在docker ps -a中看到它(状态通常为Exited (130),对应Ctrl+C的终止信号) - 之后你执行第二次
docker run nginx -it,新容器正常运行,所以docker ps只显示这个处于运行状态的容器
验证方式
执行docker ps -a查看全部容器,能看到第一个容器的状态为Exited类状态。
同时运行多个Nginx容器的方法
有两种可行方式:
后台启动容器
使用-d参数让容器在后台运行,避免占用终端:docker run -d nginx docker run -d nginx此时执行
docker ps就能看到两个运行中的容器。保留交互式终端并后台运行
若需要保留-it参数(方便后续进入容器操作),启动容器后按下Ctrl+P+Q组合键,将容器切换到后台运行,终端会回到宿主机器命令行,容器仍保持运行。之后就可以继续启动第二个容器。
如果需要把容器端口映射到宿主机,要给每个容器分配不同的宿主机端口避免冲突,例如:
docker run -d -p 8080:80 nginx docker run -d -p 8081:80 nginx
内容的提问来源于stack exchange,提问作者stackcall01
相关产品推荐
相关产品推荐

