docker启动jenkins,内部访问docker命令报错

作者: wencst 分类: docker 发布时间: 2018-04-11 15:50 阅读: 559 次

一、现象

使用docker启动jenkins,并将docker命令映射到jenkins中去。

在jenkins容器中使用docker命令时,报错:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: 
Get http://%2Fvar%2Frun%2Fdocker.sock/v1.29/images/json: dial unix /var/run/docker.sock: connect: permission denied

二、解决方法

这是由于在jenkins镜像中使用的用户是jenkins,而docker.sock文件的格式为root:docker。

网上查到有三种解决方法:

1.将jenkins用户加入到docker组中(此种方法未生效)

gpasswd -a jenkins docker(将jenkins用户加入到docker组中)
cat /etc/group | grep ^docker(查看是否加入成功)
serivce docker restart(重启docker服务)
此种方法未生效,主要是因为在jenkins镜像中并没有docker分组,映射进去的文件显示分组为999,不知是否还有其他解决方法。
2.重新打包jenkins镜像,将jenkins分组修改进去
FROM jenkins:alpine
USER root
RUN curl -O https://get.docker.com/builds/Linux/x86_64/docker-latest.tgz \
    && tar zxvf docker-latest.tgz \
    && cp docker/docker /usr/local/bin/ \
    && rm -rf docker docker-latest.tgz
ARG DOCKER_GID=999
USER jenkins:${DOCKER_GID}
然后重新docker build生成新的镜像,这种方法固然可以使用,但还是比较麻烦的。
3.修改docker.sock文件的权限'
chown jenkins docker.sock
chown jenkins:jenkins docker.sock

综上,第三种方法简单省力,就是每次重启docker服务时,要执行一次命令。

如果文章对您有用,希望您点一下文章中的广告,或者扫一下支付宝的红包,不胜感激!


Leave a Reply