如何输入已经运行新TTY的Docker容器
我有一个容器在前台运行Apache服务。 我希望能够从另一个shell中访问该容器,以便在其中“戳穿”并检查这些文件。 目前,如果我连接到容器,我只能看着Apache守护进程,不能运行任何命令。
是否有可能将另一个tty附加到正在运行的容器? 可能的话,我可以利用Docker实际上只是围绕LXC容器进行包装的事实。 我已经尝试过sudo lxc-console -n [container-id] -t [1-4]
但它似乎只有一个tty可用,并且是运行apache守护进程的那个。 也许有一种方法可以在构建过程中启用多个lxc控制台?
如果可能的话,我宁愿不配置并使用openssh服务构建容器。
使用docker 1.3,有一个新的命令docker exec
。 这可以让你输入一个正在运行的docker:
docker exec -it [container-id] bash
您应该使用JérômePetazzoni的名为'nsenter'的工具在不使用SSH的情况下输入容器。 请参阅:https://github.com/jpetazzo/nsenter
安装时只需运行: docker run -v /usr/local/bin:/target jpetazzo/nsenter
然后使用命令docker-enter <container-id>
进入容器。
更新
从docker 0.9开始,现在需要执行以下步骤,现在必须在重新启动守护进程前使用'-e lxc'
将/etc/default/docker
文件更新到docker守护程序启动选项(我通过重新启动主办)。
这都是因为......
...它[码头0.9]包含一个新的“引擎驱动程序”抽象,使得可能使用除LXC之外的其他API来启动容器。 它还提供基于新API库(libcontainer)的新引擎驱动程序,该引擎能够在不使用LXC工具的情况下处理控制组。 主要问题是,如果你依靠lxc-attach来对容器执行操作,比如在容器内启动一个shell,这对于开发环境来说是非常有用的...
资源
请注意,这将阻止Docker 0.11的新主机唯一网络可选功能处于“正常工作”状态,您将只能看到回送接口。 错误报告
事实证明,解决不同问题的解决方案也是解决这个问题的方法:
...您可以使用ps -notrunc
获取完整的lxc容器ID,然后在该容器中以root身份使用lxc-attach -n <container_id>
运行bash。
更新:您将很快需要使用ps --no-trunc
而不是使用ps -notrunc
,这已被弃用。
找到完整的容器ID
输入lxc attach命令。
顶部显示了我的apache进程运行该docker启动。
链接地址: http://www.djcxy.com/p/18255.html上一篇: How to enter in a Docker container already running with a new TTY