You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Amazon Linux 2构建Nginx Plus部署EKS启动报错排查

核心问题排查与修复

1. 容器启动报错 exec: "-nginx-plus=true": executable file not found in $PATH

这个错误和你配置的PATH环境变量没有任何关系,根因有两个:

  • 你构建的镜像只是一个纯Nginx Plus镜像,只装了nginx的rpm包,没有安装Nginx Ingress Controller对应的核心二进制(nginx-ingress),根本不具备Ingress控制器的运行能力。
  • 你给镜像设置的CMD是直接启动nginx二进制,但是你用的0.11.3版本的Helm chart启动控制器时,会把--nginxplus=true这类控制器启动参数直接拼到容器启动命令里,因为你的镜像没有适配chart的入口逻辑,这些参数被直接当成了要执行的可执行文件,所以报找不到文件的错误。

修复方案:

  • 不要从零写Dockerfile构建,直接拉取对应版本的官方Nginx Plus Ingress Controller的Amazon Linux 2基础镜像,在这个镜像基础上做自定义改造,官方镜像已经内置了控制器二进制、适配了Helm chart的启动参数逻辑,不会出现参数识别问题。
  • 如果必须从零构建,需要先下载对应版本(和你用的Helm chart版本匹配)的nginx-ingress控制器二进制放到镜像的/usr/bin/目录下,把ENTRYPOINT设置为["nginx-ingress"],才能正常接收chart传的启动参数。

2. Pod无法使用root、缺少排查工具

这个问题是镜像默认安全加固配置导致的,修复方式:

  • 构建镜像时直接预装你需要的排查工具,在Dockerfile的yum install命令里补上包名:tcpdump mtr bind-utils procps sudo,这些工具在Amazon Linux 2的默认源里都有,直接装就行,不用等Pod启动后再安装。
  • Helm部署时加两个参数强制用root用户启动,不需要改镜像里的用户配置:
    --set controller.containerSecurityContext.runAsUser=0 \
    --set controller.containerSecurityContext.allowPrivilegeEscalation=true
    
  • 你之前Dockerfile里写的echo "root:root" | chpasswd完全没用,K8s进入容器不需要系统密码,只要runAsUser设为0,exec进Pod就是root权限,可以直接执行所有操作。

3. 自定义根证书加载不生效

你现在的证书放置路径错了:Amazon Linux 2的update-ca-trust命令只会扫描/etc/pki/ca-trust/source/anchors/目录下的证书,你把qlik.crt放到/etc/ssl/nginx/目录下,执行update-ca-trust不会把这个证书加入系统信任链,自然还是会报证书校验错误。
修复方式:

  • 构建镜像时把qlik.crt拷贝到/etc/pki/ca-trust/source/anchors/目录下,再执行update-ca-trust extract,系统层面的curl、nginx的openssl模块就都会信任这个根证书。
  • 后续换成Secret挂载方案时,直接把证书挂载到上述路径,加一个postStart钩子执行update-ca-trust extract即可,不需要重新构建镜像。

验证步骤

镜像构建完成后先本地验证控制器二进制是否正常:

docker run --rm 957123096554.dkr.ecr.eu-central-1.amazonaws.com/nginx-service:6.0.1 nginx-ingress -v

如果能正常输出版本信息,说明镜像核心组件没问题,推到ECR后再用Helm部署就不会出现之前的启动报错。


内容的提问来源于stack exchange,提问作者Dilu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:48:34