Docker 服务不会在容器内运行 - 错误:ulimit:错误设置限制(不允许操作)

2024-01-29

我正在 AWS EKS 上运行集群。当前运行的容器(StatefulSet POD)内部安装有 Docker。

我在集群中将该映像作为 Kubernetes StatefulSet 运行。这是我的 yaml 文件,

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: jenkins
  labels:
    run: jenkins
spec:
  serviceName: jenkins
  replicas: 1
  selector:
    matchLabels:
      run: jenkins
  template:
    metadata:
      labels:
        run: jenkins
    spec:
      securityContext:
        fsGroup: 1000
      containers:
      - name: jenkins
        image: 99*****.dkr.ecr.<region>.amazonaws.com/<my_jenkins_image>:0.0.3
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          name: jenkins-port

在这个 POD 中,我无法运行任何 docker 命令,该命令会出现错误:

/etc/init.d/docker: 96: ulimit: 错误设置限制(不允许操作)

在我的研究中,我浏览了一些文章,但它没有解决我的问题。 我列出了我尝试过但在我的案例中未修复的解决方案

第一个解决方案:(我在容器内运行) 文章链接 https://stackoverflow.com/questions/24318543/how-to-set-ulimit-file-descriptor-on-docker-container-the-image-tag-is-phusion

$ sudo service docker stop
$ sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf"
$ sudo service docker start

第二种解决方案:(我在容器内运行)

ulimit -n 65536 in /etc/init.d/docker

第三种解决方案:**文章链接 https://unix.stackexchange.com/questions/450799/getting-operation-not-permitted-error-when-setting-ulimit-for-memlock-in-a-doc这似乎是一个更好的答案,我无法将其添加到我的配置文件中。 它说,以特权身份运行 pod。但无法在 ***Kubernetes StatefulSet* 中添加该选项。 所以我尝试添加 SecurityContext(安全上下文:fsGroup:1000)像这样的配置文件内部,

spec:
  serviceName: jenkins
  replicas: 1
  selector:
    matchLabels:
      run: jenkins
  template:
    metadata:
      labels:
        run: jenkins
    spec:
      securityContext:
        fsGroup: 1000

但它仍然不起作用。

注意:相同的图像适用于 Docker swarm

任何帮助,将不胜感激!


我在使用 Elastic Search 时遇到了这个问题,并添加了initContainer工作了。在这种情况下,解决方案可能是:

spec:
  .
  .
  .
  initContainers:  
  - name: increase-fd-ulimit
    image: busybox
    command: ["sh", "-c", "ulimit -n 65536"]
    securityContext:
      privileged: true

如果不起作用,还有一个second https://github.com/kubernetes/kubernetes/issues/3595#issuecomment-487919341解决此问题的方法包括创建新的 Dockerfile 或更改现有的:

FROM 99*****.dkr.ecr.<region>.amazonaws.com/<my_jenkins_image>:0.0.3
RUN ulimit -n 65536
USER 1000

并将 securityContext 更改为:

  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    capabilities:
      add: ["IPC_LOCK"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 服务不会在容器内运行 - 错误:ulimit:错误设置限制(不允许操作) 的相关文章

随机推荐