docker - 本地 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 更新。
我将删除我们存储库中的所有缓存版本,然后再试一次。
解决方案
我很确定这个错误来自 kaniko。
请参阅此https://github.com/GoogleContainerTools/kaniko/issues/550
和https://github.com/GoogleContainerTools/kaniko/issues/647
因此,在我们更新 kaniko 之前,我们无法使用 Pipelines 构建并在本地构建图像。
推荐阅读
- jmeter - 如何在 Jmeter5.1 中获取每个线程的样本数
- python - python - 如何在Python中使用tkinter的两个刻度滑块的值移动刻度滑块的滑块?
- python - 如何在使用 h5py 的基本数学运算上不使用所有内存?
- javascript - 删除或隐藏谷歌助手中的“取消”建议输入
- firebase - Flutter + Cloud Firestore 在桌面应用程序中工作吗?
- go - Golang fmt.Println 定时器
- python - 如何获取作为字典键值的每个数组的时差?
- asp.net - 如何从浏览器下载具有用户权限的内网文件
- reactjs - 使用 React.lazy 预加载
- python - 如何从DataFrame中的名称中提取首字母