更新: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的行为符合预期。

10-07 18:02