我有这个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 用户对该部署文件夹中的文件夹的读/写权限?

最佳答案

  • Docker文件将以未知,没有任何歧义的非root用户身份运行(请简单地想象一下mongodb以1000000001用户身份运行,但不能保证将使用所选的数字)。这可能意味着mongod用户不是导致这些问题的选定用户,因此请check the documentation获取支持任意用户ID的准则。

  • 您的mongod.conf可以作为 ConfigMap 挂载-一个Openshift对象,通常用于管理可以作为(只读)卷
  • 挂载的配置

    编辑-命令说明
  • chgrpchownchown在这里也可以很好地使用,但是由于我们只对更新“组”感兴趣,因此chgrp提供了一点额外的安全性,以确保这是唯一更改的内容(由于输入错误的命令等)。
  • chmod -R g=u
  • chmod用于更改文件权限;
  • -R告诉它通过路径递归(如果存在子目录,它们也将获得相同的权限);
  • g=u的意思是“组=用户”或“为组赋予与该用户已经存在的权限相同的权限”
  • 关于docker - 将dockerfile + bash脚本转换为OpenShift部署配置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55796409/

    10-16 07:19