如何输入已经运行新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守护程序启动选项(我通过重新启动主办)。

更新到/ etc / default / 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

下一篇: Exploring Docker container's file system