我想简单地启动一个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/
之类的东西答案 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/