我有这个dockerfile:
FROM centos:latest
COPY mongodb.repo /etc/yum.repos.d/mongodb.repo
RUN yum update -y && \
yum install -y mongodb-org mongodb-org-shell iproute nano
RUN mkdir -p /data/db && chown -R mongod:mongod /data
我可以使用docker在本地构建和运行:
docker build -t my-image .
docker run -t -d -p 27017:27017 --name my-container my-image
docker cp mongod.conf my-container:/etc/mongod.conf
docker exec -u mongod my-container "mongod --config /etc/mongod.conf"
现在,我想在OpenShift中运行容器。我设法建立并将图像推送到 namespace 。并创建了下面的运行容器的 deploymentConfig -就像我可以在本地进行的操作一样。
- apiVersion: v1
kind: DeploymentConfig
metadata:
name: my-app
namespace: my-namespace
spec:
replicas: 1
selector:
app: my-app
template:
metadata:
labels:
app: my-app
deploymentconfig: my-app
spec:
containers:
- name: my-app
image: ${IMAGE}
command: ["mongod"]
ports:
- containerPort: 27017
imagePullPolicy: Always
当我单击部署时,镜像已成功拉出,但出现错误:
exception in initAndListen: IllegalOperation: Attempted to create a lock file on a read-only directory: /data/db, terminating
为什么在
/data/db
文件夹上没有读/写?从上面的 Dockerfile 可以看出,该文件夹已创建,并且 mongod 用户是该文件夹的所有者。是否有必要以某种方式授予 mongod 用户对该部署文件夹中的文件夹的读/写权限?
最佳答案
1000000001
用户身份运行,但不能保证将使用所选的数字)。这可能意味着mongod
用户不是导致这些问题的选定用户,因此请check the documentation获取支持任意用户ID的准则。mongod.conf
可以作为 ConfigMap
挂载-一个Openshift对象,通常用于管理可以作为(只读)卷编辑-命令说明
chgrp
与chown
chown
在这里也可以很好地使用,但是由于我们只对更新“组”感兴趣,因此chgrp
提供了一点额外的安全性,以确保这是唯一更改的内容(由于输入错误的命令等)。chmod -R g=u
chmod
用于更改文件权限; -R
告诉它通过路径递归(如果存在子目录,它们也将获得相同的权限); g=u
的意思是“组=用户”或“为组赋予与该用户已经存在的权限相同的权限” 关于docker - 将dockerfile + bash脚本转换为OpenShift部署配置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55796409/