docker - 如何在 [1002120000, 1002129999] 范围内获取 UID:GID 以使其在 OpenShift 中运行?
问题描述
这适用于 OpenShift Container Platform 4.3。
考虑一下Dockerfile
。
FROM eclipse-mosquitto
# Create folders
USER root
RUN mkdir -p /mosquitto/data /mosquitto/log
# mosquitto configuration
USER mosquitto
# This is crucial to me
COPY --chown=mosquitto:mosquitto ri45.conf /mosquitto/config/mosquitto.conf
EXPOSE 1883
而且,这是我的Deployment
YAML。
apiVersion: apps/v1
kind: Deployment
metadata:
name: mosquitto-broker
spec:
selector:
matchLabels:
app: mosquitto-broker
template:
metadata:
labels:
app: mosquitto-broker
spec:
containers:
- name: mosquitto-broker
image: org/repo/eclipse-mosquitto:1.0.1
imagePullPolicy: Always
resources:
limits:
memory: "128Mi"
cpu: "500m"
volumeMounts:
- name: mosquitto-data
mountPath: /mosquitto/data
- name: mosquitto-log
mountPath: /mosquitto/log
ports:
- name: mqtt
containerPort: 1883
volumes:
- name: mosquitto-log
persistentVolumeClaim:
claimName: mosquitto-log
- name: mosquitto-data
persistentVolumeClaim:
claimName: mosquitto-data
当我oc create -f
使用上述 YAML 进行操作时,我收到此错误,2020-06-02T07:59:59: Error: Unable to open log file /mosquitto/log/mosquitto.log for writing.
也许这是一个权限错误;不能说。无论如何,通过eclipse/mosquitto
Dockerfile
,我看到这mosquitto
是一个具有 UID 和 GID 的用户1883
。所以,我按照这里securityContext
的描述添加了。
securityContext:
fsGroup: 1883
当我进行oc create -f
此修改时,我收到此错误 - securityContext.securityContext.runAsUser: Invalid value: 1883: must be in the ranges: [1002120000, 1002129999]
。
这种添加initContainer
设置权限的方法对我不起作用,因为我必须root
这样做。
那么,如何使 Eclipse mosquitto 容器能够/mosquitto/log
成功写入呢?
解决方案
这里有很多事情要解决。
首先,您应该确保您确实想要将配置文件烘焙到您的容器映像中。通常,配置文件是通过ConfigMaps
或添加Secrets
的,因为云原生应用程序中的配置通常应该来自环境(在您的情况下为 OpenShift)。
其次,您似乎正在登录PersistentVolume
. 这也是一种糟糕的做法,因为最佳做法是登录stdout
. 当然,将应用程序数据(事务日志)保存在持久卷上是有意义的。
至于您的原始问题(考虑到上述两点,应该不再相关),可以使用SecurityContextContraints
(SCC)来解决该问题:管理安全上下文约束
因此,要解决您的问题,您应该使用/创建runAsUser
正确设置的 SCC。
推荐阅读
- node.js - PassportJS 给了我令牌,但返回 401 Unauthorized
- javascript - 自定义函数未在 Promise.all() 中异步运行
- javascript - 如何在不更改页面刷新的情况下将参数 url 重写为 NextJS 中的目录?
- javascript - 在线显示电子书(使用 epub.js + WordPress)
- java - Azure Blob 存储出现 403 错误服务器无法对请求进行身份验证
- github-actions - 为什么我的 cron 配置的 GitHub Action 不是每 2 分钟运行一次?
- unity3d - 如何使用 MixedRealityToolkit 着色器和圆角平铺纹理?
- javascript - 在 React 中访问嵌套的 JSON 对象
- java - Material DateRangePicker 设置默认范围
- tfs - 从 TFS2017 到 Azure VM 的 Azure 复制错误:无法加载文件或程序集 'Newtonsoft.Json,版本 = 9.0.0.0