我有一个在前台运行Apache服务的容器.我希望能够从另一个shell访问容器,以便在其中"查找"并检查文件.目前,如果我附加到容器,我只是看着Apache守护进程,无法运行任何命令.
是否可以将另一个tty附加到正在运行的容器上?可能,我可以利用Docker实际上只是环绕LXC容器这一事实?我试过sudo lxc-console -n [container-id] -t [1-4]
但似乎只有一个tty可用,那就是运行apache守护进程的tty.也许有一种方法可以在构建期间启用多个lxc控制台?
如果可能的话,我宁愿不使用openssh服务配置和构建容器.
使用docker 1.3,有一个新命令docker exec
.这允许您输入正在运行的泊坞窗:
docker exec -it [container-id] bash
您应该使用名为'nsenter'的JérômePetazzoni工具在不使用SSH的情况下输入容器.请参阅:https://github.com/jpetazzo/nsenter
只需运行即可安装: docker run -v /usr/local/bin:/target jpetazzo/nsenter
然后使用该命令docker-enter <container-id>
输入容器.
第一步骤,这样就集装箱ID:
docker ps
这将向您显示类似
容器ID图像命令创建的状态端口名称
1170fe9e9460 localhost:5000 / python:env-7e847468c4d73a0f35e9c5164046ad88“ ./run_notebook.sh” 26秒前向上25秒0.0.0.0:8989->9999/tcp SLURM_TASK-303337_0
1170fe9e9460
在这种情况下是容器ID。
其次,进入泊坞窗:
docker exec -it [container_id] bash
因此在上述情况下:
docker exec -it 1170fe9e9460 bash
在容器中运行tmux / GNU Screen怎么办?似乎更简单的方法是通过一个简单的方法来访问任意数量的vty:
$ docker attach {container id}
更新
从docker 0.9开始,对于下面的步骤到现在工作,现在必须在重启守护进程之前用docker守护进程启动选项更新/etc/default/docker
文件'-e lxc'
(我是通过重新启动主机来完成的).
这都是因为......
... [docker 0.9]包含一个新的"引擎驱动程序"抽象,使得可以使用除LXC之外的其他API来启动容器.它还提供了一个基于新API库(libcontainer)的新引擎驱动程序,它能够在不使用LXC工具的情况下处理控制组.主要问题是,如果依靠lxc-attach对容器执行操作,比如在容器内启动shell,这对于开发环境非常有用......
资源
请注意,这将阻止docker 0.11的新主机唯一网络可选功能 "正常",您将只看到环回接口.错误报告
事实证明,针对不同问题的解决方案也是这个问题的解决方案:
...您可以使用docker
ps -notrunc
获取完整的lxc容器ID,然后lxc-attach -n <container_id>
在该容器中以root 身份使用run bash.
更新:您很快就需要使用ps --no-trunc
而不是ps -notrunc
被弃用.
找到完整的容器ID
输入lxc attach命令.
Top显示我的apache进程正在运行docker启动.