鍍金池/ 問答/Java  C  Linux  HTML/ docker環(huán)境下的jenkins容器,進(jìn)入后執(zhí)行docker命令提示權(quán)限不夠

docker環(huán)境下的jenkins容器,進(jìn)入后執(zhí)行docker命令提示權(quán)限不夠

    • 在docker下拉取jenkins鏡像后,build 并 run 之后通過 docker exec it [containerID] /bin/bash 命令進(jìn)入鏡像后,再執(zhí)行docker images命令提示權(quán)限不夠: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。此時(shí)執(zhí)行su命令想獲得權(quán)限發(fā)現(xiàn)所有密碼都是不對(duì)的。
    • 我的Dockerfile文件內(nèi)容:
    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
    回答
    編輯回答
    萌二代

    正常的做法docker images 應(yīng)該是宿主機(jī)執(zhí)行的。不是在docker容器中執(zhí)行。

    就算你做了文件映射, docker容器也不能執(zhí)行宿主機(jī)的程序。
    docker的目地之一就是隔離出各各運(yùn)行環(huán)境。
    如果docker容器中可以運(yùn)行宿主機(jī)的程序,docker就會(huì)有嚴(yán)重的安全問題。

    2018年1月14日 20:48
    編輯回答
    冷溫柔

    請(qǐng)問,樓主該問題解決了么,現(xiàn)在使用docker的jenkins鏡像也面對(duì)同樣的一個(gè)問題,查了一下資料,是要在docker容器中調(diào)用宿主機(jī)的docker命令,但這樣使用docker確實(shí)安全性

    2017年4月12日 17:51
    編輯回答
    話寡

    首先我們要從源頭排查,看下你的Dockerfile,看USER命令。USER是用來切換運(yùn)行屬主身份的,Docker 默認(rèn)是使用 root,但若不需要,建議切換使用者身份,畢竟 root 權(quán)限太大了,使用上有安全的風(fēng)險(xiǎn)。顯而易見,你指定了USER jenkins:${DOCKER_GID},你構(gòu)建的鏡像,run起來exec連進(jìn)去,你的操作環(huán)境就在jenkins用戶環(huán)境下,我想它肯定沒有足夠的權(quán)限去玩docker命令,然你的需求是要足夠的權(quán)限,那就應(yīng)該把USER jenkins:${DOCKER_GID}這一行注釋掉重新構(gòu)建鏡像,讓它連進(jìn)去就是root用戶環(huán)境。

    2017年5月16日 01:16