我有一个在前台运行Apache服务的容器。我希望能够从另一个shell访问该容器,以便在其中“戳”并检查文件。目前,如果附加到容器,就只能看到Apache守护进程,不能运行任何命令。

是否可以将另一个tty附加到正在运行的容器?可能,我可以利用Docker实际上只是围绕LXC容器的事实?我尝试了sudo lxc-console -n [container-id] -t[1-4],但似乎只有一个tty可用,这是一个运行apache守护进程。也许有一种方法可以在构建过程中启用多个lxc控制台?

如果可能的话,我宁愿不使用openssh服务来配置和构建容器。


当前回答

Nsenter就是这样做的。然而,我还需要以一种简单的方式输入一个容器,nsenter不能满足我的需求。在某些情况下有bug(黑屏+ -wd标志不工作)。此外,我想以特定用户的身份登录到特定目录中。

我最终制作了自己的工具来进入容器。你可以在https://github.com/Pithikos/docker-enter上找到它

它的使用非常简单

./docker-enter [-u <user>] [-d <directory>] <container ID>

其他回答

您应该使用Jérôme Petazzoni的名为“nsenter”的工具在不使用SSH的情况下进入容器。参见:https://github.com/jpetazzo/nsenter

docker run -v /usr/local/bin:/target jpetazzo/nsenter

然后使用命令docker-enter <container-id>进入容器。

在容器中运行tmux/GNU Screen怎么样? 似乎更顺利的方式来访问尽可能多的vty,因为你想用一个简单的:

$ docker attach {container id}

在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"

掌! !您现在在候机楼内。

在docker 1.3中,有一个新的命令docker exec。这允许你输入一个正在运行的容器:

docker exec -it [container-id] bash

注意:这里假设容器上安装了bash。您可以运行sh或容器上安装的任何交互式shell。

Nsenter就是这样做的。然而,我还需要以一种简单的方式输入一个容器,nsenter不能满足我的需求。在某些情况下有bug(黑屏+ -wd标志不工作)。此外,我想以特定用户的身份登录到特定目录中。

我最终制作了自己的工具来进入容器。你可以在https://github.com/Pithikos/docker-enter上找到它

它的使用非常简单

./docker-enter [-u <user>] [-d <directory>] <container ID>