在v0.9.0之前的Docker版本中,您可以使用lxc-attach将进程附加(注入)到容器中.例如:
docker run -d ubuntu:12.04
docker inspect {{containerhash}} | grep ID
// "ID": "d846ae242838de66f12414fbc8807acb3c77778bdb81babab7115261f4242284"
sudo lxc-attach -n d846ae242838de66f12414fbc8807acb3c77778bdb81babab7115261f4242284 -- /bin/bash
Run Code Online (Sandbox Code Playgroud)
由于0.9.0切换到libcontainer,这不再有效.
我们怎么能通过libcontainer来做到这一点?
有一个选项可以通过启动选项切换到lxc,但我想知道如何通过libcontainer实现这一点.
我想简单地启动一个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/的东西
docker ×2