Docker 如何使[10021200001002129999]范围内的UID:GID在OpenShift中运行?
这是使用OpenShift容器平台4.3实现的 考虑这个Docker 如何使[10021200001002129999]范围内的UID:GID在OpenShift中运行?,docker,filesystems,openshift,acl,mosquitto,Docker,Filesystems,Openshift,Acl,Mosquitto,这是使用OpenShift容器平台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 /mosq
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
这是我的部署
YAML
apiVersion:apps/v1
种类:部署
元数据:
姓名:莫斯奎托经纪人
规格:
选择器:
火柴标签:
应用程序:莫斯奎托经纪人
模板:
元数据:
标签:
应用程序:莫斯奎托经纪人
规格:
容器:
-姓名:莫斯奎托经纪人
图片:org/repo/eclipse-mosquitto:1.0.1
imagePullPolicy:始终
资源:
限制:
内存:“128Mi”
cpu:“500米”
体积数量:
-名称:MOSQUITO数据
挂载路径:/o/data
-名称:莫斯奎托日志
装载路径:/o/log
端口:
-名称:mqtt
集装箱港口:1883
卷数:
-名称:莫斯奎托日志
persistentVolumeClaim:
索赔名称:mosquitto log
-名称:MOSQUITO数据
persistentVolumeClaim:
索赔名称:mosquitto数据
当我使用上述YAML执行oc create-f时,我得到了这个错误,2020-06-02T07:59:59:错误:无法打开日志文件/mosquitto/log/mosquitto.log进行写入。
可能这是一个权限错误;不知道。不管怎么说,我看到mosquitto
是一个UID和GID为1883
的用户。因此,我添加了如上所述的securityContext
securityContext:
组别:1883
通过此修改执行oc create-f
时,会出现以下错误-securityContext.securityContext.runAsUser:无效值:1883:必须在范围内:[10021200001002129999]
这个设置卷权限的方法对我不起作用,因为我必须是root
那么,如何使Eclipse mosquitto容器能够成功地写入
/mosquitto/log
首先,您应该确保确实要将配置文件烘焙到容器映像中。通常,配置文件是通过ConfigMaps
或Secrets
添加的(在您的例子中是OpenShift)
其次,您似乎正在登录到一个PersistentVolume
,这也是一种可怕的做法,就像登录到stdout
一样。当然,将应用程序数据(事务日志)放在持久卷上是有意义的
至于您的原始问题(鉴于上述两点,该问题不再相关),可以使用securityContextContracts
(SCCs)来解决该问题:
因此,要解决您的问题,您应该使用/创建一个正确设置了
runAsUser
的SCC。这里有许多问题需要解决
首先,您应该确保确实要将配置文件烘焙到容器映像中。通常,配置文件是通过ConfigMaps
或Secrets
添加的(在您的例子中是OpenShift)
其次,您似乎正在登录到一个PersistentVolume
,这也是一种可怕的做法,就像登录到stdout
一样。当然,将应用程序数据(事务日志)放在持久卷上是有意义的
至于您的原始问题(鉴于上述两点,该问题不再相关),可以使用securityContextContracts
(SCCs)来解决该问题:
因此,要解决您的问题,您应该使用/创建一个正确设置了
runAsUser
的SCC。可以使用配置文件中的log\u dest stdout
修复日志记录问题。但是您仍然需要权限来为会话和保留的消息编写mosquitto持久文件。不幸的是,这不是一个选项。事实上,由于某种原因,log\u timestamp\u格式
甚至不能被mosquitto
Docker图像识别!这是我用基本Dockerfile构建的映像。日志问题可以通过配置文件中的log\u dest stdout
解决。但是您仍然需要权限来为会话和保留的消息编写mosquitto持久文件。不幸的是,这不是一个选项。事实上,由于某种原因,log\u timestamp\u格式
甚至不能被mosquitto
Docker图像识别!这是我用基本Dockerfile构建的图像。