Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 如何使[10021200001002129999]范围内的UID:GID在OpenShift中运行?_Docker_Filesystems_Openshift_Acl_Mosquitto - Fatal编程技术网

Docker 如何使[10021200001002129999]范围内的UID:GID在OpenShift中运行?

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

这是使用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 /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构建的图像。