我可以成功运行一个 ubuntu
容器:
# docker run -it -d ubuntu
3aef6e642327ce7d19c7381eb145f3ad10291f1f2393af16a6327ee78d7c60bb
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3aef6e642327 ubuntu "/bin/bash" 3 seconds ago Up 2 seconds condescending_sammet
但执行docker attach
会挂起:
# docker attach 3aef6e642327
在我按下任意键之前,比如说Enter
键:
# docker attach 3aef6e642327
root@3aef6e642327:/#
root@3aef6e642327:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
为什么docker attach
会挂起?更新:
阅读评论后,我认为我得到了答案:
前提: "docker attach" 重用相同的 tty,而不是打开新的 tty。 (1)在非守护进程模式下执行
docker run
:# docker run -it ubuntu
root@eb3c9d86d7a2:/#
一切正常后,运行ls
命令:
root@eb3c9d86d7a2:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@eb3c9d86d7a2:/#
(2) 使用守护进程模式运行 docker run
命令:
# docker run -it -d ubuntu
91262536f7c9a3060641448120bda7af5ca812b0beb8f3c9fe72811a61db07fc
实际上,以下内容应该已从运行的容器中输出到标准输出:
root@91262536f7c9:/#
执行docker attach
命令看起来会卡住,但实际上它在等待你的输入:
# docker attach 91262536f7c9
ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@91262536f7c9:/#
docker run -p 80:80 nginx
。 - user2915097# docker run -it -d ubuntu
自相矛盾。-it
表示“交互式地运行,并配备 tty”,而-d
则表示“在后台运行”。 请参考文档。 - Auziasbash
,但是由于没有tty、stdin或stdout,所以bash
退出。如果您例如运行docker run -d ubuntu nc -l 1445
,则容器将保持运行状态。 - Auzias