Docker和netstat:netstat没有显示由docker容器

时间:2016-04-06 14:59:56

标签: docker netstat

我将接收器的docker端口暴露给主机,类似

docker run -p 80:80 ...

然后我尝试用netstat显示所有监听端口以进行调试,例如:

netstat -at

奇怪的是,尽管netstat正在监听并回复浏览器,但它不会显示我的Docker容器和暴露的端口。

如何让netstat显示这些公开的端口?

更新 我在Debian 8 Jessie上运行这个。这就是我的所作所为:

docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                                      NAMES
9dfa08bab50d        workflows-nginx     "/bin/sh -c '/usr/sbi"   2 hours ago         Up 2 hours                  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   workflows-nginx
d0b0c3f90f13        workflows-django    "/bin/sh -c 'python /"   7 hours ago         Up 3 hours                  0.0.0.0:8000->8000/tcp                     workflows-django
99a857c92533        workflows-db        "/docker-entrypoint.s"   7 hours ago         Up 3 hours                  5432/tcp                                   workflows-db

此处docker报告容器端口已转发到主机。此外,如果我停止workflows-nginx容器,它将停止通过http(端口80)回复浏览器。如果我再次启动它,它会再次开始响应。

以下是sudo netstat -at | less的输出:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0      0 localhost:ipp           *:*                     LISTEN     
tcp        0      0 *:15672                 *:*                     LISTEN     
tcp        0      0 *:postgresql            *:*                     LISTEN     
tcp        0      0 localhost:smtp          *:*                     LISTEN     
tcp        0      0 *:25672                 *:*                     LISTEN     
tcp        0      0 *:48142                 *:*                     LISTEN     
tcp        0      0 *:sunrpc                *:*                     LISTEN     
tcp        0      0 *:epmd                  *:*                     LISTEN     
tcp        0      0 bob-acer:34866          104.16.33.249:http      ESTABLISHED
tcp        0      0 bob-acer:42380          stackoverflow.com:https ESTABLISHED
tcp        0      0 bob-acer:42543          stackoverflow.com:https ESTABLISHED
tcp        0      0 bob-acer:42525          stackoverflow.com:https ESTABLISHED
tcp        0      0 bob-acer:44076          stackoverflow.com:https ESTABLISHED
tcp        0      0 bob-acer:42944          stackoverflow.com:https ESTABLISHED
tcp        0      0 localhost:epmd          localhost:50831         ESTABLISHED
tcp        0      0 bob-acer:42655          stackoverflow.com:https ESTABLISHED
tcp        0      0 bob-acer:42384          stackoverflow.com:https ESTABLISHED
tcp        0      0 bob-acer:44626          stackoverflow.com:https ESTABLISHED
tcp        0      0 bob-acer:42390          stackoverflow.com:https ESTABLISHED
tcp        0      0 localhost:50831         localhost:epmd          ESTABLISHED
tcp        0      0 bob-acer:48301          c2.52.c0ad.ip4.st:https ESTABLISHED
tcp        0      0 bob-acer:42151          stackoverflow.com:https ESTABLISHED
tcp        0      0 bob-acer:42205          stackoverflow.com:https ESTABLISHED
tcp        0      0 bob-acer:42539          stackoverflow.com:https ESTABLISHED
tcp        0      0 bob-acer:44737          stackoverflow.com:https ESTABLISHED
tcp        0      0 bob-acer:39648          77.94.164.251:https     ESTABLISHED
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 localhost:ipp           [::]:*                  LISTEN     
tcp6       0      0 [::]:postgresql         [::]:*                  LISTEN     
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN     
tcp6       0      0 [::]:44794              [::]:*                  LISTEN     
tcp6       0      0 [::]:8000               [::]:*                  LISTEN     
tcp6       0      0 [::]:amqp               [::]:*                  LISTEN     
tcp6       0      0 [::]:sunrpc             [::]:*                  LISTEN     
tcp6       1      0 localhost:58497         localhost:ipp           CLOSE_WAIT

如您所见,端口80和端口443均未报告。由于某种原因,workflows-django的端口8000在IPv6接口上打开。此外,我忘了在主机上禁用postgres,但仍然不会与postgres容器workflows-db发生冲突。

一切都在我的本地笔记本上运行,所以我猜不会与主机混淆。

我的码头版本是:

docker --version
Docker version 1.10.3, build 20f81dd

答案:这与docker EXPOSE参数有关。如果在dockerfile中写入此行并使用-p运行容器,则该端口将在netstat中可见。如果你使用-p但不写EXPOSE,你的端口将不会被netstat列出。

3 个答案:

答案 0 :(得分:2)

netstat应显示公开的端口。这是一个例子

anovil@anovil-Latitude-E6440:docker$ sudo netstat -at|grep 3030
anovil@anovil-Latitude-E6440:docker$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
anovil@anovil-Latitude-E6440:docker$ docker run -d -p 3030:80 httpd:2.4
4310ac5fbdbc7314ab4d23e34099a710a3a8790dcf2c6d0a84202c1de5c9fd30
anovil@anovil-Latitude-E6440:docker$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
4310ac5fbdbc        httpd:2.4           "httpd-foreground"   3 minutes ago       Up 3 minutes        0.0.0.0:3030->80/tcp   hungry_fermat
anovil@anovil-Latitude-E6440:docker$ sudo netstat -at|grep 3030
tcp6       0      0 [::]:3030               [::]:*                  LISTEN
anovil@anovil-Latitude-E6440:docker$ sudo netstat -tulpn|grep 3030
tcp6       0      0 :::3030                 :::*                    LISTEN      10294/docker-proxy
anovil@anovil-Latitude-E6440:docker$ 

您需要验证自己的一些基本事项:

  1. 您是否使用提升的权限运行netstat?当你是非root用户时,某些事情可能会错过
  2. 您的docker容器是否在您预期的同一主机上运行?查看docker ps
  3. docker ps列出端口转发吗?如上所述,您应该能够看到类似0.0.0.0:3030->80/tcp
  4. 的内容

    另请注意,docker-proxy是主机上运行的代理。 上面的所有命令都假定你在linux上运行。 这是用ubuntu 15.10进行测试的

    如果您仍然觉得自己错过了转发,请回复您的操作系统,泊坞版等。

    谢谢,

答案 1 :(得分:2)

此代码将向您显示容器中带有pid的打开的端口:

container_name=some_container_name
c_pid=`docker container inspect -f "{{.State.Pid}}" ${container_name}`
nsenter -t ${c_pid} -n netstat -anp

答案 2 :(得分:1)

回答问题永远不会太晚。

使用netstat -tln,而不是netstat -at

如果您通知--numeric的{​​{1}}选项,答案很简单。通过使用此选项,netstat将使用数字而不是有意义的字符串打印地址。然后,您就可以像上面提到的那样 grep 。以下显示了它的工作原理。

netstat