linux - docker attach vs lxc-attach

标签 linux virtualization docker lxc

更新: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 :

If no command is specified, the current default shell of the user running lxc-attach will be looked up inside the container and executed. This will fail if no such user exists inside the container or the container does not have a working nsswitch mechanism.

docker attach 的行为符合预期。

关于linux - docker attach vs lxc-attach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310925/

相关文章:

linux - Apache服务器在ubuntu上无法上线

linux - 使用 Linux 滞后一列

C++ Libcurl : curl_easy_perform returned error code 28 when transferring files from linux system to windows remote system

virtualization - 在 Parallels 虚拟机中运行服务器。主机可以访问吗?

wpf - 使用 VirtualizationMode ="Recycling"和 SeclectionMode ="Extended"在 ListBox 中选择错误?

docker - 在 dockerfile 中使用 secret

c - 如何取消映射并释放linux模块中的highmem页面

macos - 如何在 Mac 上为 Qemu 启用 KVM?

docker - 为什么docker compose启动后就退出了?

linux - 允许容器监听 80 端口的副作用