问题描述
正常行为(不使用 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 (将#修改为@)