当前位置: 首页 > 知识库问答 >
问题:

以后如何连接到正在运行的Docker容器?

申屠涛
2023-03-14

我想简单地启动一个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

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

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

关于如何启动容器,保持其运行,然后稍后附加到容器并返回提示以执行ls、尾部等操作的任何想法。

编辑:我最后这样做了:

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

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

这看起来还是有点老套,但它很管用……我认为最好是在容器上安装ssh,或者使用类似的方法http://phusion.github.io/baseimage-docker/

共有3个答案

韩梓
2023-03-14

我在使用< code>docker attach时遇到了同样的问题。将容器作为服务运行时(使用-d和前端进程)< code>docker attach不会给出提示。更多信息请点击此处:docker attach vs lxc-attach

你的问题的答案是,查看在 Docker 容器中自动运行服务。

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

杰罗姆·佩塔佐尼的这篇博客中解释了一些更高级的信息和选项:http://jpetazzo.github.io/2014/03/23/lxc-attach-nsinit-nsenter-docker-0-9/

艾望
2023-03-14

以下命令:

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

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

董弘新
2023-03-14

只是输入密码。

< code > docker attach container _ name < br > < code > ctrl p < code > ctrl q

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

更新:对于那些还不知道的人,从docker 1.3左右开始,我们可以使用exec命令附加到容器并轻松退出它。

例如:docker-exec-it container_name bash

你可以在需要的时候输入exit,它将退出容器并保持运行。

 类似资料:
  • 我正在运行2个spring boot应用程序:一个客户端和rest-api。客户机与rest-api通信,rest-API与mongodb数据库通信。所有3层都在docker容器中运行。 我启动容器,通常指定docker文件中公开的端口,并将它们映射到主机上的端口,例如:-p 7070:7070,其中7070是docker文件中公开的端口。 当我通过< code > Java-jar[applic

  • 问题内容: 遵循此示例:https : //docs.docker.com/engine/examples/mongodb/ 当尝试使用以下命令连接到mongoDB时:( 其中ip是boot2docker ip的名称)+ docker ps的端口号: 27017 / tcp 或-P 0.0.0.0:49155->27017/tcp 无论哪种方式,我都会收到以下错误: 警告:无法连接到ip:2701

  • 问题内容: 我正在研究Centos7。我有一个运行Jenkins的Docker容器。在那个Jenkins容器中,我必须构建并运行其他Docker容器。但是詹金斯不认识码头工人。我能够执行一个shell并将docker安装在容器中。但是,是否有可能让容器在主机上使用我的docker- engine?如何使用? 在Jenkins-(docker)-容器中安装Docker的最佳选择是什么? 问题答案:

  • 我运行一个jupyter笔记本在一个docker容器(ubuntu)上运行一个远程机器(亚马逊p2)。我想通过我的浏览器(http://localhost:8883/)访问笔记本,但我得到: 我的ssh配置: 我正在运行容器(在远程机器上): 在我运行的docker容器上: 我能够连接到远程机器上运行的笔记本(不在docker容器中)。 如何从浏览器连接到docker机器上运行的笔记本?

  • 问题内容: 我看到很多人都在为此苦苦挣扎,好像在redis容器映像中可能有一个错误,而其他人似乎在追寻类似的问题。 我在DockerHub上使用标准Redis映像。(https://github.com/dockerfile/redis) 像这样运行它: 进入服务器后,就可以启动服务器,并从容器映像进行Redis ping了。 不幸的是,我无法从主机连接到Redis容器。 我已经尝试设置,例如下面

  • 我创建了一个Dockerfile来在Docker中运行Docker: 启动容器并运行docker ps后,我得到:“无法连接到unix:///var/run/docker.sock.docker守护程序是否正在运行?" 我在容器中执行了命令dockerd,结果是: 启动守护程序时出错:初始化网络控制器时出错:获取控制器实例时出错:未能创建NAT链DOCKER:iptables失败:iptables