docker环境下的jenkins容器,进入后执行docker命令提示权限不够

    • 在docker下拉取jenkins镜像后,build 并 run 之后通过 docker exec it [containerID] /bin/bash 命令进入镜像后,再执行docker images命令提示权限不够: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。此时执行su命令想获得权限发现所有密码都是不对的。
    • 我的Dockerfile文件内容:
    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 run命令:
    docker run -p 49002:8080 --name jenkins_docker -d -v /Users/UserName/jenkins_docker:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock jenkins_docker
    阅读 10.4k
    4 个回答

    正常的做法docker images 应该是宿主机执行的。不是在docker容器中执行。

    就算你做了文件映射, docker容器也不能执行宿主机的程序。
    docker的目地之一就是隔离出各各运行环境。
    如果docker容器中可以运行宿主机的程序,docker就会有严重的安全问题。

    请问,楼主该问题解决了么,现在使用docker的jenkins镜像也面对同样的一个问题,查了一下资料,是要在docker容器中调用宿主机的docker命令,但这样使用docker确实安全性

    新手上路,请多包涵

    首先我们要从源头排查,看下你的Dockerfile,看USER命令。USER是用来切换运行属主身份的,Docker 默认是使用 root,但若不需要,建议切换使用者身份,毕竟 root 权限太大了,使用上有安全的风险。显而易见,你指定了USER jenkins:${DOCKER_GID},你构建的镜像,run起来exec连进去,你的操作环境就在jenkins用户环境下,我想它肯定没有足够的权限去玩docker命令,然你的需求是要足够的权限,那就应该把USER jenkins:${DOCKER_GID}这一行注释掉重新构建镜像,让它连进去就是root用户环境。

    撰写回答
    你尚未登录,登录后可以
    • 和开发者交流问题的细节
    • 关注并接收问题和回答的更新提醒
    • 参与内容的编辑和改进,让解决方法与时俱进
    推荐问题
    宣传栏