首页 > 解决方案 > 本地 docker 和 k8s 反应不同

问题描述

我有一个基于nginx:alpine. 在我本地的 docker-deamon 上,我可以毫无问题地启动它。但是当我通过 k8s 部署它时,容器无法启动并出现以下错误:

2020/03/04 08:01:38 [emerg] 1#1: open() "/var/run/nginx.pid" 失败 (13: Permission denied)
nginx: [emerg] open() "/var/run /nginx.pid”失败(13:权限被拒绝)

有人知道发生了什么吗?我敢打赌,k8s-cluster 有问题。

我的 dockerfile 看起来像这样:

#Dockerfile
# build nginx-container
FROM nginx:alpine

# delete nginx-default-page and creates non root user
RUN rm -rf /usr/share/nginx/html/* \
  && addgroup --gid 98761 nonroot \
  && adduser -u 9876 -G nonroot --disabled-password nonroot \
  && touch /var/run/nginx.pid \
  && chown 9876:98761 /var/run/nginx.pid \
  && chown -R 9876:98761 /var/cache/nginx

# copy our conf and web into nginx
COPY nginx/nginx.conf /etc/nginx/conf.d/default.conf
COPY static-webfiles/* /usr/share/nginx/html/

USER 9876:98761

编辑

这是用于部署的 yaml。没有相同名称的部署,我将它分配给带有kubectl apply -f deloyment.yaml. 我确信使用 docker-image 进行部署。

#deployment.yaml
apiVersion: apps/v1
kind: Deployment

metadata:
  name: frontend
  labels:
    app: frontend
    environment: review

spec:
  replicas: 1
  revisionHistoryLimit: 1
  selector:
    matchLabels:
      app: frontend
      environment: review

  template:
    metadata:
      labels:
        app: frontend
        environment: review

    spec:
      containers:
        - name: frontend
          image: frontend:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 8080

编辑²

在我的 mini-kube-cluster 上,相同的图像运行没有任何问题。

编辑³

我认为存在 docker-layer-caching 问题。以前使用根映像的所有环境都在此错误上失败。当我在本地构建 docker-image 并推送它时,一切都很好。
我在 Dockerfile 中唯一改变的是非 root 更新。

我将删除我们存储库中的所有缓存版本,然后再试一次。

标签: dockernginxkubernetes

解决方案


我很确定这个错误来自 kaniko。
请参阅此https://github.com/GoogleContainerTools/kaniko/issues/550
https://github.com/GoogleContainerTools/kaniko/issues/647

因此,在我们更新 kaniko 之前,我们无法使用 Pipelines 构建并在本地构建图像。


推荐阅读