本文介绍了Docker如何进入启动容器,分享给大家,具体如下:
在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。
这个时候如果需要进入容器进行操作,有多种方法,包括使用官方的attach或exec命令,以及第三方的nsenter工具等。
1、attach命令
attach命令是Docker自带的命令,命令格式为:
docker attach [–detach-keys[=[]]] [–no-stdin] [–sig-proxy[=true]] Container
支持三个主要选项:
·–detach-keys[=[]]:指定退出attach模式的快捷键序列,默认是CTRL-p CTRL-q;
·–no-stdin=true|false:是否关闭标准输入,默认是保持打开;
·–sig-proxy=true|false:是否代理收到的系统信号给应用进程,默认为true。
但是,使用attach命令有时候并不方便。当多个窗口同时使用attach命令连到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
2、exec命令
Docker从1.3.0版本起提供了一个更加方便的exec命令,可以在容器内直接执行任意命令。该命令的基本格式为:
docker exec [-d|–detach] [–detach-keys[=[]]] [-i|–interactive] [–privileged] [-t|–tty] [-u|–user[=USER]] CONTAINER COMMAND [ARG…]。
比较重要的参数有:
·-i,–interactive=true|false:打开标准输入接受用户输入命令,默认为false;
·–privileged=true|false:是否给执行命令以高权限,默认为false;
·-t,–tty=true|false:分配伪终端,默认为false;
·-u,–user=”“:执行命令的用户名或ID。
例如进入到刚创建的容器中,并启动一个bash:
可以看到,一个bash终端打开了,在不影响容器内其他应用的前提下,用户可以很容易与容器进行交互。
通过指定-it参数来保持标准输入打开,并且分配一个伪终端。通过exec命令对容器执行操作是最为推荐的方式。
3、nsenter 工具
在util-Linux软件包版本2.23+中包含nsenter工具。如果系统中的util-linux包没有该命令,可以按照下面的方法从源码安装:
$ cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24; $ ./configure --without-ncurses $ make nsenter && cp nsenter /usr/local/bin
为了使用nsenter连接到容器,还需要找到容器进程的PID,可以通过下面的命令获取:
PID=$(docker inspect --format "{{ .State.Pid }}" )
通过这个PID,就可以连接到这个容器:
$ nsenter --target $PID --mount --uts --ipc --net --pid
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
问题内容: 我使用以下命令创建了容器: 以下是命令: 真的没有太多要说的,我希望容器能启动并保持正常运行。这是日志: 问题答案: 您正在尝试运行,它是需要tty 才能运行的交互式外壳。使用,在“分离”模式下运行此命令实际上没有任何意义,但是您可以通过添加到命令行来做到这一点,以确保容器具有与其关联的有效tty并保持连接状态: 在启动分离的容器时,您通常会运行某种长期存在的非交互式进程(例如,或We
问题内容: 我开始使用Docker。我正在使用WordPress基本映像和docker-compose。 我正在尝试使用ssh进入其中一个容器,以检查在初始构建期间创建的文件/目录。我试着跑步,但是没有做任何事情。即使这样做,我还是希望有一个可以遍历目录结构的控制台,而不是运行单个命令。用Docker执行此操作的正确方法是什么? 问题答案: 将允许您连接到Docker容器,但这与并不是真的一样。例
问题内容: 假设我有一个要运行的Docker容器,那么我可以调用 一切都很好。如果系统崩溃并重新启动,是否有内置的方式来运行容器,使其能够自动重新启动? 如果是这样,这在Docker Compose中也可用吗? 问题答案: 是的,docker具有重启策略,该策略可以处理此问题。这也可以在compose.yml配置文件中找到。
假设我有一个要运行的Docker容器,然后我可以调用 一切都很好。是否有一种内置方法可以运行容器,以便在系统崩溃并重新启动时自动重新启动容器? 如果是这样,这在 Docker Compose 中是否也可用?
问题内容: 要启动容器,我输入以下命令: 但我想在此容器中打开外壳以键入mongo命令。我应该运行什么命令来执行相同的操作? 问题答案: 您可以通过运行以下命令来运行交互式mongo shell: 否则,如果您的容器已经在运行,则可以使用以下命令:
问题内容: 我正在尝试创建一个将自动启动apache的Dockerfile。没事。但是,如果我登录到容器并运行它就可以了。为什么我不能从Dockerfile运行该命令? 问题答案: 问题出在这里:执行此命令时,进程将与外壳分离。但是Docker仅在主进程处于活动状态时才能工作。 解决方案是在 前台 运行Apache 。必须看起来像这样:(仅更改了最后一行)。