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

K8s单Pod创建多容器异常,共享emptyDir卷访问index.html问题求助

问题根因
  • 同一Pod内的容器共享网络命名空间,两个Nginx容器都默认监听80端口,端口冲突导致第二个Nginx容器启动失败退出(返回退出码1)
  • Debian容器被定义为普通工作容器,其任务仅为执行一次echo命令生成文件,执行完成后进程结束自动退出,当前Pod的restartPolicy: Never配置不会重启该容器,因此Debian容器始终处于未就绪状态
  • Nginx容器的共享卷挂载路径为/one和/two,并非Nginx默认提供web服务的根目录/usr/share/nginx/html,即便容器正常运行也无法直接对外提供该index.html的访问能力
修复方案

将Debian容器调整为Init容器(优先于所有普通容器执行,执行完成后自动退出,不计入Pod就绪容器计数),同时修改第二个Nginx的监听端口避免冲突,调整共享卷挂载路径到Nginx默认web根目录,修改后的YAML如下:

apiVersion: v1
kind: Pod
metadata:
  name: multi-containers
spec:
  restartPolicy: Never
  volumes:
  - name: multi-data
    emptyDir: {}
  # 定义为Init容器,优先执行生成文件
  initContainers:
  - name: debian-container
    image: debian
    volumeMounts:
    - name: multi-data
      mountPath: /pod-data
    command: ["/bin/sh"]
    args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]
  containers:
  - name: nginx-multicontainerone
    image: nginx
    volumeMounts:
    - name: multi-data
      # 挂载到Nginx默认web根目录
      mountPath: /usr/share/nginx/html
    ports:
    - containerPort: 80
  - name: nginx-multicontainertwo
    image: nginx
    volumeMounts:
    - name: multi-data
      mountPath: /usr/share/nginx/html
    # 修改监听端口避免冲突
    env:
    - name: NGINX_PORT
      value: "8080"
    ports:
    - containerPort: 8080
验证方法
  • Pod启动完成后执行kubectl get pods multi-containers,可看到状态为2/2 Running
  • 执行kubectl exec multi-containers -c nginx-multicontainerone -- curl localhost,可返回Debian生成的文件内容
  • 执行kubectl exec multi-containers -c nginx-multicontainertwo -- curl localhost:8080,可返回相同的文件内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:36:03