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

求助:Kubernetes部署的Nginx服务器无法播放本地视频

问题分析与修正方案

核心问题点

  1. 视频文件挂载错误:你的Deployment中movie卷指向存储index.html的ConfigMap,但该ConfigMap并未包含movie.mp4,导致容器内目标路径下无视频文件。
  2. ConfigMap不支持二进制文件:视频属于二进制格式,ConfigMap仅适用于文本类配置,无法正确存储视频文件。
  3. HTML视频路径错误:浏览器访问的是Nginx对外暴露的URL路径,而非容器内部文件路径,你写的容器内路径浏览器无法识别。

修正步骤

1. 修正ConfigMap中的HTML视频路径

将index.html里的视频源路径改为Nginx服务的相对路径,同时用|保留HTML格式避免YAML解析错误:

apiVersion: v1
kind: ConfigMap
metadata:
  name: index-html-configmap
  namespace: default

data:
  index.html: |
    <video width="1920" height="1080" autoplay loop muted>
      <source src="/video/movie.mp4" type="video/mp4" />
      Your browser does not support the video tag.
    </video>

2. 选择合适的视频存储方式(三选一)

方案一:EmptyDir临时存储(仅测试用,Pod重启视频丢失)

修改Deployment挂载EmptyDir到视频目录,之后手动传入视频:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default

spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        volumeMounts:
          - name: nginx-index-file
            mountPath: /usr/share/nginx/html/index.html
            subPath: index.html  # 仅挂载单个文件,不覆盖整个目录
          - name: video-storage
            mountPath: /usr/share/nginx/html/video
      volumes:
      - name: nginx-index-file
        configMap:
          name: index-html-configmap
      - name: video-storage
        emptyDir: {}  # 临时存储卷

执行命令将本地视频传入Pod:

# 获取Pod名称
kubectl get pods -n default
# 替换<your-pod-name>为实际Pod名称
kubectl cp ./movie.mp4 default/<your-pod-name>:/usr/share/nginx/html/video/movie.mp4
方案二:PersistentVolumeClaim(持久化存储,适合生产)
  1. 创建PVC(根据你的存储类调整配置):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: video-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi  # 按需调整存储大小
  1. 修改Deployment挂载PVC:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default

spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        volumeMounts:
          - name: nginx-index-file
            mountPath: /usr/share/nginx/html/index.html
            subPath: index.html
          - name: video-storage
            mountPath: /usr/share/nginx/html/video
      volumes:
      - name: nginx-index-file
        configMap:
          name: index-html-configmap
      - name: video-storage
        persistentVolumeClaim:
          claimName: video-pvc
  1. 将视频上传到PVC对应的存储后端(操作方式取决于你使用的存储类,如本地存储、云存储等)。
方案三:打包视频到自定义Nginx镜像(适合固定视频场景)
  1. 创建Dockerfile:
FROM nginx:latest
# 创建视频目录
RUN mkdir -p /usr/share/nginx/html/video
# 复制本地视频到镜像内
COPY movie.mp4 /usr/share/nginx/html/video/
# 若需用ConfigMap挂载index.html,可跳过下面这行
COPY index.html /usr/share/nginx/html/
  1. 构建并推送镜像:
docker build -t custom-nginx-video:v1 .
# 推送到你的镜像仓库(Docker Hub或私有仓库)
docker push your-registry/custom-nginx-video:v1
  1. 修改Deployment使用自定义镜像:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default

spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: your-registry/custom-nginx-video:v1  # 替换为你的镜像地址
        ports:
        - containerPort: 80
        # 若继续用ConfigMap挂载index.html,保留以下配置
        volumeMounts:
          - name: nginx-index-file
            mountPath: /usr/share/nginx/html/index.html
            subPath: index.html
      volumes:
      - name: nginx-index-file
        configMap:
          name: index-html-configmap

3. 验证配置

应用修改后的配置:

kubectl apply -f configmap.yaml
# 若使用PVC,先执行kubectl apply -f pvc.yaml
kubectl apply -f deployment.yaml

通过Nginx的Service访问页面(确保已创建Service暴露80端口),检查视频是否正常播放。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:28:17