当前位置: 首页 > 面试题库 >

Docker:以任何方式列出正在运行的Docker容器中的打开套接字?

阎智
2023-03-14
问题内容

我想在正在运行的docker容器中执行netstat,以查看打开的TCP套接字及其状态。但是,在我的某些Docker容器上,netstat不可用。是否可以通过某些Docker
API在不使用netstat的情况下获取打开的套接字(及其状态以及它们连接到的IP地址,如果有的话)的任何方法?(顺便说一句,我的容器使用docker-
proxy-即不直接桥接)

我想我可以直接查看/ proc文件系统,但是到那时,我最好将docker cp netstat放入容器并执行它。我想知道码头工人是否可以提供任何便利。


问题答案:

您可以使用该nsenter命令在Docker容器的网络名称空间内的主机上运行命令。只需获取Docker容器的PID:

docker inspect -f '{{.State.Pid}}' container_name_or_id

例如,在我的系统上:

$ docker inspect -f '{{.State.Pid}}' c70b53d98466
15652

并且一旦有了PID,就可以将其用作的target(-t)选项的参数nsenter。例如,要netstat在容器网络名称空间内运行:

$ sudo nsenter -t 15652 -n netstat
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN

请注意,即使容器尚未netstat安装,此方法也可以工作:

$ docker exec -it c70b53d98466 netstat
rpc error: code = 13 desc = invalid header field value "oci runtime error: exec failed: container_linux.go:247: starting container process caused \"exec: \\\"netstat\\\": executable file not found in $PATH\"\n"

nsenterutil-linux包装的一部分)



 类似资料:
  • 我想简单地启动一个docker容器,它执行一些最终启动JBoss的java代码。 这工作得很好,除了我不知道如何再次连接到容器并回到bash提示符。 这是我启动容器的方式: 这是runAutomate.sh 现在,我必须在最后做尾部,以在容器完成运行我的自动化代码后保持其运行。最终的结果是Jboss在正确配置我的应用程序的情况下运行。 现在,当我再次尝试连接到容器时,我只得到一个没有提示的空白屏幕

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

  • 问题内容: 我想使用Docker部署我的rails项目。因此,我使用Docker-Compose。但是我收到一个奇怪的错误消息。当运行docker-compose up(包含db-container和postgresql,redis和带有rails的Web容器)时,我得到一个 rails server -h 所以我不明白为什么会收到此消息,因为每次运行docker- compose时,都会启动新容

  • 编辑(2/19/21):自从几年前我提出这个原始问题以来,已经过去了很多时间,从那时起我看到了一系列的活动。我重新选择了一个答案,我认为它与解决这个问题的最本地化和最安全的选项一致(通常与docker compose相关)。虽然docker引入了命令,但这通常是一个危险的操作,我会谨慎使用,因为您可能会无意中影响机器上的其他应用程序或设置 我在使用Docker 1.9删除Docker卷时遇到问题。

  • 问题内容: 有一个列出图像的命令,但是似乎没有对应的。 除了扎根并调查那里似乎没有办法。我想念什么吗?那是不应该做的事情吗? 问题答案: 要仅显示 正在运行的容器,请 使用给定命令: 要显示 所有容器,请 使用给定命令: 要显示 最新创建的容器 (包括所有状态),请使用给定命令: 要显示 n个最后创建的容器 (包括所有状态),请使用给定命令: 要显示 总文件大小,请 使用给定命令: 上面显示的内容

  • 问题内容: 是否可以备份正在运行的Docker容器?该命令适合这样做吗? 问题答案: 一位朋友发表了评论 您好Slava,很抱歉您的问题已关闭。作为记录,Slava谈论的是docker.io,这是Linux容器的运行时。是的,这是一种合适的方法。它将生成整个容器文件系统状态的压缩包,并将其转储到stdout上。所以 将产生可用的tarball。您可以使用以下命令重新导入压缩包 请注意,原始元数据(