在Atlassian Bamboo Server的Docker中使用Docker拒绝权限。

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

我试图使用DIND与Atlassian Bamboo构建一个docker镜像。

我已经创建了如下的部署StatefulSet。

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: bamboo
  name: bamboo
  namespace: csf
spec:
  replicas: 1
  serviceName: bamboo
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: bamboo
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: bamboo
    spec:
      containers:
      - image: atlassian/bamboo-server:latest
        imagePullPolicy: IfNotPresent
        name: bamboo-server
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        securityContext:
          privileged: true
        volumeMounts:
        - name: bamboo-home
          mountPath: /var/atlassian/application-data/bamboo
        - mountPath: /opt/atlassian/bamboo/conf/server.xml
          name: bamboo-server-xml
          subPath: bamboo-server.xml
        - mountPath: /var/run 
          name: docker-sock
      volumes:
      - name: bamboo-home
        persistentVolumeClaim:
          claimName: bamboo-home
      - configMap:
          defaultMode: 511
          name: bamboo-server-xml
        name: bamboo-server-xml
      - name: docker-sock 
        hostPath: 
          path: /var/run
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

注意,我已经设置了 privileged: truesecurityContext 来启用这个功能。

然而,当我试图运行docker镜像时,我得到一个权限错误。

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See '/var/atlassian/application-data/bamboo/appexecs/docker run --help'

我在设置DIND时是否遗漏了什么?

docker kubernetes bamboo docker-in-docker dind
1个回答
0
投票

正如文档中提到的 此处

如果你想以非root用户的身份运行docker,那么你需要将其添加到docker组中。


如果docker组不存在,请创建它。

$ sudo groupadd docker

将您的用户添加到docker组中。

$ sudo usermod -aG docker $USER

注销后再登录,这样你的组成员资格就会被重新评估。

$ newgrp docker

确认您可以在没有sudo的情况下运行docker命令。

$ docker run hello-world

如果这样还不行的话,你可以修改docker socket的权限,以便能够连接到docker守护进程varrundocker.sock。

sudo chmod 666 /var/run

1
投票

主机系统上的varrundocker.sock文件是由不同的用户拥有的,而不是运行竹子服务器容器进程的用户。

在不了解集群细节的情况下,我认为docker是以 "root"(UID=0)的身份运行的。bamboo-server以 "bamboo "的身份运行,可以从它的 Docker文件,通常会映射到主机系统上1XXX范围内的UID。由于这些用户是不同的,而且容器进程并没有收到任何关于(主机)套接字的特定权限,所以会给出错误。

所以我认为有两种方法可能。

  • 或者容器进程继续以 "竹子 "用户的身份运行 但在主机系统上获得足够的权限来访问varrundocker.sock。这通常意味着将竹子用户在主机系统上映射到的UID添加到主机系统的docker组中。然而,对主机系统进行更改可能是或可能不是一个选项,这取决于你的集群的上下文,并且在集群背景下是棘手的,因为pod可能会迁移到不同的节点,在那里更改没有被应用,或者UID改变。

  • 或者容器被改变为以一个足够特权的用户开始运行,是根用户。有两种方法可以实现这个目的。1.您扩展和定制Atlassian提供的基本映像以更改用户,或2.您通过 "runAsUser "和 "runAsGroup "安全上下文指令来覆盖容器在运行时作为运行的用户,如指定的那样 此处. 两者都应该是'0'。

© www.soinside.com 2019 - 2024. All rights reserved.