【问题标题】:Netstat not showing ports exposed by dockerNetstat 未显示 docker 暴露的端口
【发布时间】:2018-11-05 18:47:33
【问题描述】:

由于某种原因,netstat 没有列出 docker 公开的端口。正如here 所建议的那样,我对端口 8080 和 5050 都使用了EXPOSE。但是从主机上看不到它们。

Dockerfile

...

FROM openjdk:11-jre-slim

COPY --from=build /usr/src/app/api/target/track-metadata-api-*.jar /app/track-metadata-api.jar

WORKDIR /app

EXPOSE 8080 5050

CMD java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5050 -jar track-metadata-api.jar

docker ps

$ docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                                            NAMES
a6d3381a992d        track-metadata_track-metadata   "/bin/sh -c 'java -a…"   7 minutes ago       Up 7 minutes        0.0.0.0:5050->5050/tcp, 0.0.0.0:8080->8080/tcp   track-metadata_track-metadata_1

netstat & curl

$ sudo netstat --all | grep 8080 # returns nothing
$ curl http://localhost:8080/v1/track-metadata/filtered
[{"authorName":"AC/DC","duration":208,"id":1,"tags":"#rock","trackName":"Highway to Hell"},{"authorName":"Sum41","duration":209,"id":2,"tags":"#rock","trackName":"War"},{"authorName":"Ziggy Marley","duration":220,"id":3,"tags":"#ragge","trackName":"Beach in Hawaii"}]

Docker & Ubuntu 版本

$ docker --version 
Docker version 18.06.1-ce, build e68fc7a
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.10
Release:    18.10

代号:宇宙

【问题讨论】:

    标签: docker docker-compose dockerfile port netstat


    【解决方案1】:

    问题出在netstat 命令中,添加-anp 标志后,端口被列出。

    $ sudo netstat -anp | grep 8080
    tcp6       0      0 :::8080                 :::*                    LISTEN      16341/docker-proxy
    

    【讨论】:

      【解决方案2】:

      为了公开端口,您必须在使用docker run 运行映像时传递-P(将所有公开的端口发布到随机端口)标志,或者传递-p 标志并指定特定端口,详细说明@987654321 @

      【讨论】:

      • 端口暴露见docker ps的输出