1、启动容器,将宿主机的/var/run/docker.sock隐射到容器/var/run/docker.sock

jenkins:
  image: 'jenkins/jenkins:lts'
  restart: always
  ports:
    - "8080:8080"
  dns:
    - 192.168.1.36
  expose:
    - "8080"
    - "50000"
  privileged: true
  container_name: jenkins
  environment:
    - TZ=Asia/Shanghai
  volumes:
    - ./jenkins_home/:/var/jenkins_home
    - ./jenkinswar/jenkins.war:/usr/share/jenkins/jenkins.war
    - /var/run/docker.sock:/var/run/docker.sock

2、将docker命令映射到容器,或者直接拷贝docker到数据目录下,执行后还是会报错,如下
在这里插入图片描述
3、解决方案:明显就是无权限,socket文件一般只有root或者具有sudo权限的用户有访问权限,如果不想使用sudo就要创建一个docker组,这个组中的用户也可以访问。这里我们先查看容器内部权限:
在这里插入图片描述
接着就给socket授权

[root@k8s-jenkins jenkins]# chown .1000 /var/run/docker.sock
[root@k8s-jenkins jenkins]# ll /var/run/docker.sock 
srw-rw----. 1 root 1000 0 Apr 24 16:42 /var/run/docker.sock

4、最后验证

[root@k8s-jenkins jenkins]# docker exec -it jenkins /bin/bash
jenkins@a8124ac41f55:/$ /var/jenkins_home/tools/docker  ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
a8124ac41f55   jenkins/jenkins:lts   "/sbin/tini -- /usr/…"   3 minutes ago   Up 3 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 50000/tcp   jenkins

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐