将dockerfile + bash脚本转换为OpenShift部署配置

问题描述 投票:0回答:1

我有这个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中运行容器。我已经设法构建并将图像推送到命名空间。并创建了运行容器的下面的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用户是该文件夹的所有者。

是否有必要在部署配置中授予mongodb用户对该文件夹的读/写权限?

docker openshift
1个回答
3
投票
  1. Docker文件将作为一个未知的,arbirtrary,非root用户运行(简单地想象mongodb以用户1000000001身份运行,但不能保证将是所选的数字)。这可能意味着mongod用户不是导致这些问题的选定用户,所以check the documentation指导支持任意用户ID。 对于支持作为任意用户运行的映像,可由映像中的进程写入的目录和文件应由根组拥有,并由该组读/写。要执行的文件还应具有组执行权限。 将以下内容添加到Dockerfile会设置目录和文件权限,以允许根组中的用户在构建的映像中访问它们: RUN chgrp -R 0 /some/directory && \ <- Set the group to 0 (the root group) chmod -R g=u /some/directory <- Here you will set your permissions
  2. 您的mongod.conf可以作为ConfigMap安装 - 一个Openshift对象,通常用于管理可以作为(只读)卷安装的配置

Edit - Command explanation

  1. chgrp vs chown chown也可以在这里使用,但由于我们只对更新“组”感兴趣,chgrp提供了一些额外的安全性,以确保唯一的改变(由于错误的命令等)
  2. chmod -R g=u chmod用于更改文件权限; -R告诉它通过路径递归(如果有子目录,他们也将获得相同的权限); g=u表示“group = user”或“赋予组与用户已存在的权限相同的权限”
© www.soinside.com 2019 - 2024. All rights reserved.