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

如何从Jenkins Docker容器内部使用Docker

戚永福
2023-03-14
问题内容

我面临以下问题:我创建了一个Jenkins Docker容器,并将主机上的Docker套接字与该容器链接。像这样:

docker run -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 -p 50000:50000 -d --name jenkins --restart unless-stopped jenkins

然后,当我尝试在詹金斯上创建一些作业时,我收到通常的“权限被拒绝”消息:

尝试在unix:///var/run/docker.sock上连接到Docker守护程序套接字时获得的权限被拒绝:获取
http://%2Fvar%2Frun%2Fdocker.sock/v1.29/images/json:拨打unix
/var/run/docker.sock:连接:权限被拒绝

但是,如果我附加到容器并使用root用户运行命令,则不会发生该问题。

我怎样才能解决这个问题?

我无法通过运行将jenkins用户添加到主机上的docker组sudo gpasswd -a jenkins docker(因为主机上没有jenkins用户,仅在容器中),并且我也无法在容器内运行此命令(因为容器没有了解任何码头工人组)。关于如何解决此问题的任何提示?


问题答案:

您可以在容器内添加docker组。这样做:

groupadd -g <docker-group-id> docker

找出<docker-group-id>在主机中运行的方法:

ls -ln /var/run/docker.sock

然后将jenkins用户添加到docker组:

gpasswd -a jenkins docker

考虑到这可能产生的任何安全问题:

警告:泊坞窗组授予与root用户等效的特权。有关这如何影响系统安全性的详细信息,请参阅Docker Daemon Attack Surface。

参考文档



 类似资料:
  • 我想运行podman作为运行CI/CD管道的容器。然而,我一直从podman容器中得到这个错误: 我使用Jenkins Kubernetes插件来编写CI/CD管道,这些管道在Kubernetes集群中作为容器运行。我已经成功地编写了使用Docker-in-Docker容器来运行< code>docker build和< code>docker push命令的管道。 然而,在容器中运行Docker

  • 如何从容器内部获取docker的容器名称? 我不能使用“inspect”,因为我必须使用容器内部的脚本从JSON url获取信息。

  • 我有两个docker容器在我的Mac主机上运行-容器1是docker Hub的Jenkins,容器2是docker Hub的SonarQube。我有两个容器成功运行。我可以通过从我的主机访问Jenkins,我可以通过访问我的SonarQube。 詹金斯容器是这样启动的: SonarQube容器是这样启动的: 难道我不应该能够从我的主机通过它们的内部IP地址访问每个容器吗? 我如何测试一个容器(例如

  • 4.3.1.4 创建/使用内部内容供应器 内部内容供应器禁止除内部应用以外的应用使用。 下面展示了如何实现内部内容供应器的示例代码。 要点(创建内容供应器): 定义内部签名权限。 需要内部签名权限。 将导出属性显式设置为true。 验证内部签名权限是否由内部应用定义。 验证参数的安全性,即使这是来自内部应用的请求。 由于请求应用是内部的,因此可以返回敏感信息。 导出 APK 时,请使用与请求应用相

  • 问题内容: 我有一个用go语言编写的网络服务器,并且正在提供来自不同来源(本地,其他服务器,S3)的一些音频文件。我想为此文件提供部分内容,以便HTML音频标签能够搜索和循环。 我该如何实现?我知道包功能可以做到这一点,但是我如何通过自己提供文件来实现呢?我需要在没有此操作的情况下执行此操作,以便可以使用相同的处理程序处理来自不同来源的文件。 问题答案: 提供部分内容并非易事。有关介绍,请参见Wi

  • 由于Docker从引擎版本20.10开始支持cgroup v2,因此它将自动在启用了cgroups v2的发行版上使用它。从容器中获取唯一容器ID的已知解决方案不再有效。 尝试与docker v20.10.8在Debian 11与阿尔卑斯山:最新。 cgroup v1的工作解决方案:如何从容器本身中获取DockerLinux容器信息? 正如docker参考中所述,对于cgroup v2,容器id在