更新:Docker 0.9.0现在使用libcontainer,从LXC转移请参阅:将进程附加到Docker libcontainer容器
我正在运行弹性搜索:
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有什么问题吗?
NB.dockerfile/elasticsearch以:
ENTRYPOINT ["/usr/share/elasticsearch/bin/elasticsearch"]
Ben Whaley.. 7
您附加到正在运行elasticsearch
的不是交互式命令的容器.你没有得到一个shell来输入,因为容器没有运行shell.原因lxc-attach
是因为它给你一个默认的shell.每个人lxc-attach:
如果未指定任何命令,则将在容器内查找运行lxc-attach的用户的当前默认shell并执行.如果容器内不存在此类用户或容器没有可用的nsswitch机制,则会失败.
docker attach
表现得像预期的那样.
您附加到正在运行elasticsearch
的不是交互式命令的容器.你没有得到一个shell来输入,因为容器没有运行shell.原因lxc-attach
是因为它给你一个默认的shell.每个人lxc-attach:
如果未指定任何命令,则将在容器内查找运行lxc-attach的用户的当前默认shell并执行.如果容器内不存在此类用户或容器没有可用的nsswitch机制,则会失败.
docker attach
表现得像预期的那样.