Atlassian竹子服务器中Docker中Docker的权限被拒绝
我想用DIND和Atlassian竹子打造一个码头工人的形象 我创建了部署/状态集,如下所示:Atlassian竹子服务器中Docker中Docker的权限被拒绝,docker,kubernetes,bamboo,docker-in-docker,dind,Docker,Kubernetes,Bamboo,Docker In Docker,Dind,我想用DIND和Atlassian竹子打造一个码头工人的形象 我创建了部署/状态集,如下所示: --- apiVersion: apps/v1 kind: StatefulSet metadata: labels: app: bamboo name: bamboo namespace: csf spec: replicas: 1 serviceName: bamboo revisionHistoryLimit: 10 selector: matchLa
---
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
请注意,我在securityContext
中设置了privileged:true
以启用此功能
但是,在尝试运行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的内容 如果要以非root用户身份运行docker,则需要将其添加到docker组。
如果docker组不存在,则创建该组
$ sudo groupadd docker
将您的用户添加到docker组
$ sudo usermod -aG docker $USER
注销并重新登录,以便重新评估您的组成员资格
$ newgrp docker
验证是否可以在不使用sudo的情况下运行docker命令
$ docker run hello-world
如果这没有帮助,您可以更改docker socket的权限,以便能够连接到docker守护程序/var/run/docker.sock
sudo chmod 666 /var/run
主机系统上的/var/run/docker.sock文件由运行bamboo server容器进程的用户以外的其他用户拥有 在不知道集群的任何细节的情况下,我假设docker以“root”(UID=0)身份运行。从its中可以看出,Bambol服务器以“Bambol”的形式运行,通常会映射到主机系统上1XXX范围内的UID。由于这些用户不同,并且容器进程没有收到(主机)套接字的任何特定权限,因此给出了错误 因此,我认为有两种可能的方法:
- 或者容器进程继续以“bambol”用户的身份运行,但在主机系统上有足够的权限访问/var/run/docker.sock。这通常意味着将主机系统上用户映射到的UID添加到主机系统上的docker组。但是,根据集群的上下文,对主机系统进行更改可能是一个选项,也可能不是一个选项,而且在集群上下文中是很棘手的,因为pod可能会迁移到未应用更改和/或UID更改的其他节点
- 或者将容器更改为作为根用户以足够特权的用户运行。有两种方法可以实现这一点:1。您可以扩展和自定义Atlassian提供的基本映像以更改用户或2。您可以通过指定的“runAsUser”和“runAsGroup”securityContext指令覆盖容器在运行时运行的用户。两者都应为“0”
- 更好的处理方法是运行一个sidecar容器-docker:dind,并导出docker\u主机=tcp://dind:2375 在主竹容器中。通过这种方式,您将在dind容器中调用Docker,而不需要挂载/var/run/Docker.sock我有两个想法可能会有所帮助,第一个是将您的用户添加到Docker组,如前所述。第二种是使用sudo chmod 666/777/var/run/docker.sock。让我知道这是否对你有用,或者你仍然需要帮助。将用户添加到docker组是我所缺少的@jt97Happy。我添加此评论是为了更具可视性。