为什么 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
结果为连接到 localhost 8080 端口 [tcp/http-alt] 成功!
但仅此而已。
容器中的 strace 实例不打印任何内容。为什么?
即strace 挂起等待新的接受
最佳答案
您需要使用-p
选项来指定用于监听的本地端口。否则,它将将该数字解释为主机名。
ENTRYPOINT ["strace", "nc", "-vlp", "8080"]
打开详细模式可以更清楚地了解 nc
正在做什么。
关于Docker不绑定(bind)端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57170709/