我有一个在前台运行Apache服务的容器 . 我希望能够从另一个shell访问容器,以便在其中“查找”并检查文件 . 目前,如果我附加到容器,我只是看着Apache守护进程,无法运行任何命令 .
是否可以将另一个tty附加到正在运行的容器上?可能,我可以利用Docker实际上只是环绕LXC容器这一事实?我试过 sudo lxc-console -n [container-id] -t [1-4]
但似乎只有一个tty可用,那就是运行apache守护进程的tty . 也许有一种方法可以在构建期间启用多个lxc控制台?
如果可能的话,我宁愿 not 使用openssh服务配置和构建容器 .
9 回答
使用docker 1.3,有一个新命令docker exec . 这允许您输入正在运行的docker:
如何在容器中运行tmux / GNU Screen?似乎可以通过简单的方式访问尽可能多的vty:
您应该使用JérômePetazzoni's tool called ' nsenter'在不使用SSH的情况下输入容器 . 见:https://github.com/jpetazzo/nsenter
只需运行即可安装:
docker run -v /usr/local/bin:/target jpetazzo/nsenter
然后使用命令
docker-enter <container-id>
进入容器 .First 步骤获取容器ID:
docker ps
这会告诉你类似的东西
在这种情况下,
1170fe9e9460
是容器ID .Second ,进入泊坞窗:
docker exec -it [container_id] bash
所以在上面的例子中:
docker exec -it 1170fe9e9460 bash
nsenter
那样做 . 但是我还需要以简单的方式输入容器,而nsenter不足以满足我的需求 . 在某些情况下它是错误的(黑屏加-wd标志不起作用) . 此外,我想以特定用户和特定目录登录 .我最终制作了自己的工具来输入容器 . 你可以在以下网址找到它:https://github.com/Pithikos/docker-enter
它的用法很简单
“nsinit”的方式是:
安装nsinit
从容器内部:
从外面:
用它
Update
从docker 0.9开始,对于下面的步骤到现在工作,现在必须在重启守护进程之前用
'-e lxc'
更新/etc/default/docker
文件到docker守护进程启动选项(我是通过重启主机来完成的) .这都是因为......
source
请注意,这将阻止来自"working"的新host only networking optional feature of docker 0.11,您将只看到环回接口 . bug report
事实证明,a different question的解决方案也是这个解决方案:
Update: 您很快就需要使用
ps --no-trunc
而不是ps -notrunc
,这已被弃用 .查找完整的容器ID
输入lxc attach命令 .
Top显示我的apache进程正在运行docker启动 .
将您带到容器控制台 .
我在运行的microsoft / iis上运行了powershell作为守护进程使用