如何解决为什么在使用 gosu 时进程不会与端口相关联?
正常行为(不使用 gosu)
我有一个调用入口点脚本的容器,该脚本使用 gosu
实用程序在设置了 env var 时以特定用户身份运行指定命令,否则以 root 身份运行:
入口点.sh
if [ -n "$RUNAS_USER" ]; then
exec /usr/local/bin/gosu $RUNAS_USER "$@"
else
exec "$@"
fi
当没有提供 RUNAS_USER
env var 时(即 exec "$@"
被执行并且容器以 root 身份运行),当我登录到容器并运行 {{1 }},我可以看到进程与端口正确关联(查看最后一列):
ss -nltp
意外行为(使用 gosu)
当提供 6e9b3af868c3:/ # ss -nltp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 50 0.0.0.0:39995 0.0.0.0:* users:(("java",pid=7,fd=187))
LISTEN 0 128 0.0.0.0:8076 0.0.0.0:* users:(("java",fd=205))
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("java",fd=204))
LISTEN 0 50 0.0.0.0:9010 0.0.0.0:* users:(("java",fd=186))
env var 时(即执行 RUNAS_USER
并且容器以特定用户身份运行),当我登录容器并运行 exec /usr/local/bin/gosu $RUNAS_USER "$@"
时,端口不再与任何进程相关联(即 ss -nltp
的输出中没有 users:(("java",fd=187))
等条目):
ss -nltp
问题
当容器成功将端口与底层进程相关联时,该端口在网络外部可见。但是,使用
b13a253cd5bf:/ # ss -nltp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:8076 0.0.0.0:*
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:*
LISTEN 0 50 0.0.0.0:9010 0.0.0.0:*
LISTEN 0 50 0.0.0.0:46613
时的上述问题意味着我的 K8s 部署没有设置可从外部路由到我的 nodeport 服务的 pod 的端口。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。