我如何在以后附加到正在运行的Docker容器?

时间:2014-05-20 06:38:12

标签: docker

我想简单地启动一个docker容器来执行一些最终启动JBoss的java代码。

这个工作正常,但我无法弄清楚如何再次附加到容器并返回到bash提示符。

这就是我启动容器的方式:

docker run -i -t -p 80:80 -v /tmp/automatefiles:/automatefromhost jboss bash -c 'cd automatefromhost; chmod 777 *.*; ./runAutomate.sh;'

这是runAutomate.sh

/usr/bin/java -cp Automate.jar -Djava.net.preferIPv4Stack=true net.Automate > automateresults &
tail -f automateresults

现在我必须在最后执行尾部以在容器运行完Automate代码后保持容器运行。 最终的结果是Jboss在我的应用程序配置正确的情况下运行。

现在,当我再次尝试连接到容器时,我只得到一个没有提示的空白屏幕......并且无法返回到容器内的提示符。因此,在容器启动后无法与容器进行交互。

关于如何启动容器的任何想法,让它保持运行然后再附加到容器中,然后回到提示中执行ls, tail etc .

之类的操作

修改: 我最终这样做了:

我复制了这种方法:https://stackoverflow.com/a/20932423/1519407 并添加到我的脚本

while ( true )
    do
    echo "Detach with Ctrl-p Ctrl-q. Dropping to shell"
    sleep 1
    /bin/bash
done

这仍然看起来有点hacky但它​​确实有效......我认为最好沿着将ssh安装到容器上或使用类似http://phusion.github.io/baseimage-docker/

之类的东西

5 个答案:

答案 0 :(得分:8)

只需输入代码字。

docker attach container_name
ctrl p ctrl q

exit命令停止容器,其中ctrlp和ctrl q只是分离该容器并使其保持运行

更新:对于那些不熟悉的人,从docker 1.3左右,我们可以使用exec命令附加到容器并毫不费力地退出容器。
< / p>

例如:docker exec -it container_name bash

您可以在需要时输入exit,它将退出容器并仍然保持运行。

答案 1 :(得分:2)

我对docker attach有同样的问题。将容器作为服务运行时(使用-d和前进程)docker attach将不会提示。有关详细信息,请访问:docker attach vs lxc-attach

回答你的问题是,Run a service automatically in a docker container

另一个选择是安装ssh服务器并通过ssh连接。

Jerome Petazzoni在本博客中解释了一些更高级的信息和选项:http://jpetazzo.github.io/2014/03/23/lxc-attach-nsinit-nsenter-docker-0-9/

答案 2 :(得分:2)

以下命令:

docker exec -it [container id/name] /bin/bash

可以附加正在运行的容器。

答案 3 :(得分:1)

我知道这不是一个好习惯,但工作正常。

在第一个容器中,我在dockerfile中添加了一个卷共享。所以,我用&#34; - volume-from&#34;运行另一个容器。 CONTAINER_ID读取日志。

答案 4 :(得分:0)

  

docker attach [options] [container]

最简单的形式:

  

docker attach my_container

一旦进入,您可以使用 Ctrl - P 然后 Ctrl - Q ;如果你使用 Ctrl - C ,你将杀死容器。

https://docs.docker.com/engine/reference/commandline/attach/