当前位置: 首页 > 面试题库 >

Docker中的Docker权限错误

扈德容
2023-03-14
问题内容

我在用于CI的docker设置中有一个docker。本质上,该机器上装有jenkins CI服务器,该服务器使用相同的机器docker套接字为CI创建节点。

直到我最近更新了docker为止,这一直很好。我已经确定了问题,但似乎无法找出正确的方法来使它起作用。

host $ docker exec -it myjenkins bash
jenkins@container $ docker ps
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.26/containers/json: dial unix /var/run/docker.sock: connect: permission denied

host $ docker exec -it -u root -it myjenkins bash
root@container $ docker ps 
... docker ps from host container yay! ...

这就是我的猜测。我可以从容器中访问主机docker套接字,但似乎无法授予jenkins用户许可。

我已经添加了docker组,也将jenkins用户添加到了docker组。但是我仍然遇到同样的错误。我已经重新开始了几次,所以,我对下一步的工作感到茫然。

有没有办法在特定套接字上强制用户权限?


问题答案:

您需要将主机上的docker组的gid映射到jenkins所属容器内的组的gid。这是我的Dockerfile中的示例,说明了如何构建jenkins从属映像:

ARG DOCKER_GID=993

RUN groupadd -g ${DOCKER_GID} docker \
  && curl -sSL https://get.docker.com/ | sh \
  && apt-get -q autoremove \
  && apt-get -q clean -y \
  && rm -rf /var/lib/apt/lists/* /var/cache/apt/*.bin

RUN useradd -m -d /home/jenkins -s /bin/sh jenkins \
  && usermod -aG docker jenkins

在此示例中,993恰好是主机上docker的主键,您可以对其进行调整以匹配您的环境。

OP的解决方案: 如果无法重建,则可以使用root相应地设置docker组并添加用户。如果您尝试过此操作,则可能必须删除从站(groupdel docker)上的组:

docker exec -it -u root myjenkins bash
container $ groupadd -g 993 docker
container $ usermod -aG docker jenkins


 类似资料:
  • 我在CI的docker设置中有一个docker。本质上,机器上有一个jenkins CI服务器,它使用相同的机器docker套接字为CI创建节点。 这是伟大的工作,直到我最近更新了docker。我已经发现了这个问题,但是我似乎找不出正确的方法来让它工作。 这就是我的猜测。我可以从容器中访问主机docker套接字,但我似乎无法向jenkins用户授予权限。 我已经添加了docker组,还将jenki

  • 我的Dockerfile配置: 报错信息: 我已经尝试过以下几种方法: Dockerfile配置中添加RUN chmod -R 777 /yice Dockerfile配置添加 USER root,它会报: 找不Chrome,然后因为ghcr.io/puppeteer/puppeteer:latest镜像切换的用户名为pptruser,所以我手动在代码里给puppeteer配置executable

  • 问题内容: 我有两个Docker容器:Nginx和App。 该应用程序容器扩展了PHP-fpm,并具有我的Laravel代码。 在我的工作中: 在我的Nginx Dockerfile中,我正在做: 在我的App Dockerfile中,我正在做: 成功运行docker-compose up后,尝试localhost时出现以下错误 流或文件“ /var/www/storage/logs/larave

  • 我试图用docker运行一个简单的命令,读取我的主目录中的文件,并在本地机器上的同一目录中写入输出文件(

  • Docker安装在AWS EC2 Ubuntu 16.04实例上,如下所示: 引发权限被拒绝错误: 尝试连接到处的Docker守护程序套接字时,权限被拒绝unix:///var/run/docker.sock: 收到http:///var/run/docker.sock/v1.39/info: 拨号unix/var/run/docker.sock:connect:权限被拒绝 显示: uname-a

  • 问题内容: 我的Jenkins不在Docker容器中运行,只是传统安装到VPS。执行简单的测试项目时出现以下错误。我正在使用Ubuntu 14,java 7和稳定的Jenkins。我尝试了所有可以在Google上找到的方法,但无法正常工作。 我正在尝试执行此外壳 代码更改后。 这是错误: 我可以在控制台中以root身份运行“ docker”,这没问题,为什么jenkins无法尝试运行“ docke