更新:Docker 0.9.0现在使用libcontainer,从LXC转向,请参阅:Attaching process to Docker libcontainer container
我正在运行elasticsearch的一种方式:
docker run -d -p 9200:9200 -p 9300:9300 dockerfile/elasticsearch
检查它显示的过程,如下所示:
$ docker ps --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
49fdccefe4c8c72750d8155bbddad3acd8f573bf13926dcaab53c38672a62f22 dockerfile/elasticsearch:latest /usr/share/elasticsearch/bin/elasticsearch java About an hour ago Up 8 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp pensive_morse
现在,当我尝试连接正在运行的容器时,我会被堆叠起来:
$ sudo docker attach 49fdccefe4c8c72750d8155bbddad3acd8f573bf13926dcaab53c38672a62f22
[sudo] password for lsoave:
tty没有连接,提示也没有回来。用lxc-attach做同样的事情很好:
$ sudo lxc-attach -n 49fdccefe4c8c72750d8155bbddad3acd8f573bf13926dcaab53c38672a62f22
root@49fdccefe4c8:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 49 20:37 ? 00:00:20 /usr/bin/java -Xms256m -Xmx1g -Xss256k -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMa
root 88 0 0 20:38 ? 00:00:00 /bin/bash
root 92 88 0 20:38 ? 00:00:00 ps -ef
root@49fdccefe4c8:/#
有人知道docker attach有什么问题吗?
注意dockerfile/elasticsearch结尾于:
ENTRYPOINT ["/usr/share/elasticsearch/bin/elasticsearch"]
最佳答案
您将附加到运行elasticsearch
的容器,该容器不是交互式命令。由于容器未运行 shell 程序,因此您无法输入 shell 程序。 lxc-attach
起作用的原因是因为它为您提供了默认的shell。每man lxc-attach:
docker attach
的行为符合预期。