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

tin*_*lly 3 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;'
Run Code Online (Sandbox Code Playgroud)

这是runAutomate.sh

/usr/bin/java -cp Automate.jar -Djava.net.preferIPv4Stack=true net.Automate > automateresults &
tail -f automateresults
Run Code Online (Sandbox Code Playgroud)

现在我必须在最后执行尾部以使容器在完成运行我的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
Run Code Online (Sandbox Code Playgroud)

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

pho*_*nix 8

只需输入代码字.

docker attach container_name
ctrl p ctrl q

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

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

例如: docker exec -it container_name bash

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