我有一个在前台运行Apache服务的容器。我希望能够从另一个shell访问该容器,以便在其中“戳”并检查文件。目前,如果附加到容器,就只能看到Apache守护进程,不能运行任何命令。
是否可以将另一个tty附加到正在运行的容器?可能,我可以利用Docker实际上只是围绕LXC容器的事实?我尝试了sudo lxc-console -n [container-id] -t[1-4],但似乎只有一个tty可用,这是一个运行apache守护进程。也许有一种方法可以在构建过程中启用多个lxc控制台?
如果可能的话,我宁愿不使用openssh服务来配置和构建容器。
更新
从docker 0.9开始,下面的步骤现在可以工作,现在必须在重启守护进程之前用'-e lxc'更新/etc/default/docker文件到docker守护进程启动选项(我是通过重启主机来完成的)。
这都是因为……
...它[docker 0.9]包含了一个新的“引擎驱动程序”抽象,使使用成为可能
使用LXC以外的API来启动容器。它也提供了一个新的
基于一个新的API库(libcontainer)的引擎驱动程序
在不使用LXC工具的情况下处理Control group。主要问题是
如果您依赖lxc-attach对您的
容器,比如在容器中开始一个壳,也就是
对开发环境非常有用…
源
请注意,这将阻止docker 0.11的新主机唯一网络可选特性“工作”,您将只看到环回接口。错误报告
事实证明,另一个问题的答案也是这个问题的答案:
...你可以使用docker ps -notrunc获取完整的lxc容器ID和
然后使用lxc-attach -n <container_id>在容器中运行bash作为
根。
更新:你很快就需要使用ps——no-trunc而不是ps -notrunc,后者已经被弃用了。
找到完整的容器ID
输入lxc attach命令。
顶部显示我的apache进程运行docker启动。
在Windows 10上,我安装了docker。我在容器上运行Jnekins时遇到了相同的错误消息。下面是一步一步解决这个问题的指南:
第一步:打开gitbash并运行docker run -p 8080:8080 -p 5000:50000 jenkins。
步骤2:打开新终端。
第三步:执行“docker ps”获取正在运行的容器列表。复制容器id。
第四步:现在如果你执行"docker exec -it{容器id} sh"或"docker exec -it{容器id} bash",你会得到一条类似于"输入设备不是TTY "的错误消息。如果你使用的是mintty,试着在命令前加上winpty。”
第五步:执行命令" $winpty docker exec -it{容器id} sh"
掌! !您现在在候机楼内。