【问题标题】:Docker doesn't bind portsDocker 不绑定端口
【发布时间】:2019-07-23 19:07:14
【问题描述】:

为什么从 docker 容器中暴露的端口不起作用?

让我们考虑下面的例子

Dockerfile:

FROM debian

RUN apt-get update && \
    apt-get -y upgrade && \
    apt-get -y install netcat strace

EXPOSE 8080

ENTRYPOINT ["strace", "nc", "-l", "8080"]

cmd运行docker run -it -p 8080:8080 --cap-add SYS_PTRACE ex_001

任何通过echo "TRALALA" | nc -v localhost 8080 发送内容的尝试都会导致Connection to localhost 8080 port [tcp/http-alt] succeeded!,但仅此而已。

容器中的 strace 实例不打印任何内容。为什么?

即strace 挂起等待新的接受

【问题讨论】:

    标签: docker


    【解决方案1】:

    您需要-p 选项来指定用于侦听的本地端口。否则,它将数字解释为主机名。

    ENTRYPOINT ["strace", "nc", "-vlp", "8080"]
    

    开启详细模式可以更清楚地了解nc 在做什么。

    【讨论】:

    • 这很奇怪。在 Ubuntu nc -l 8080 上工作正常。但是在 debian 上它会导致没有 -p 的错误