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

詹金斯在Docker中可以访问主机Docker

唐沈义
2023-03-14
问题内容

我有以下工作流程,用于将Web应用发布到我的开发服务器。该服务器只有一个docker主机,我正在使用docker-compose来管理容器。

  1. 将我的应用程序中的更改推送到私有gitlab(在docker中运行)。该应用程序包括一个Dockerfile和docker-compose.yml
  2. Gitlab触发了一个jenkins构建(jenkins也正在docker中运行),它会执行一些常规的构建工作(例如,运行测试)
  3. 然后,Jenkins需要构建一个新的Docker映像并使用docker-compose进行部署。

我遇到的问题是在步骤3中。通过设置方式,jenkins容器可以访问主机泊坞窗,因此docker在构建脚本中运行任何命令与在主机上运行该命令本质上相同。DockerFile对于詹金斯,使用以下命令完成此操作:

FROM jenkins
USER root

# Give jenkins access to docker
RUN groupadd -g 997 docker
RUN gpasswd -a jenkins docker

# Install docker-compose
RUN curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
RUN chmod +x /usr/local/bin/docker-compose

USER jenkins

并将以下卷映射到jenkins容器:

-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker

jenkins中的典型构建脚本如下所示:

docker-compose build
docker-compose up

可以,但是有两个问题:

  • 感觉真像是在砍。但是我发现的唯一其他选择是将docker插件用于jenkins,发布到注册表,然后通过某种方式让主机知道需要重启。这是很多可移动的部分,并且docker-jenkins插件要求docker主机位于开放端口上,我真的不想透露它。

  • jenkins DockerFile包含groupadd -g 997 docker需要它才能使jenkins用户访问docker。但是,GID(997)是主机上的GID,因此不可移植。

我不确定我要寻找什么解决方案。我看不到任何实际的方法可以解决该问题,但是如果有一种方法可以允许在jenkins容器内运行docker命令而不必在DockerFile中对GID进行硬编码,那就太好了。有人对此有任何建议吗?


问题答案:

我遇到了同样的问题。由于GID问题,我最终给了Jenkins无密码的sudo特权。我在这里写了更多有关此的内容:https : //blog.container-
solutions.com/running-docker-in-jenkins-in-docker

这实际上并没有影响安全性,因为拥有docker特权实际上等同于sudo权限。



 类似资料:
  • 问题内容: 以下是配置文件: 在这里可用。 运行以下命令后: 从浏览器启动时,詹金斯大师显示以下错误: 詹金斯大师的Docker文件在这里: 为什么詹金斯大师给这个例外? 问题答案: 问题是您使用了3岁的 Jenkins版本2.7.3。堆栈跟踪抱怨方法 根据Jenkins API,此方法在2.98版中引入。有关更多详细信息,请参见更改日志。

  • 我们怎样才能完成它? 注意:使用jenkins-slave作为服务不是一个选项,因为我们有其他安全访问问题。

  • 问题内容: 我想在Docker容器中运行Jenkins。一切都好。我可以这样运行:我也可以添加持久性存储。当我创建管道必须执行命令(和)时,问题就来了。首先,错误是未在系统上安装docker。是的,期望。然后我开始搜索,发现如何在容器中运行docker(传递2个持久卷): 这可以运行,但是有一些例外。容器中有命令,但是当我尝试运行它时,它将引发异常: 我该如何解决这个问题?在Docker中安装Je

  • 问题内容: 我创建了在SVN上具有文件的Jenkins项目(https://repo.xxx.xxx/svn/priv/projectname;证书是自签名的)。我的问题是,詹金斯(Jenkins)对此项目有空的工作空间(仅.svn),并且无法连接到SVN存储库。错误号为: 詹金斯 版 1.521 我在某个地方建立了我应该使用 -Dsvnkit.http.sslProtocols = SSLv3

  • > 难道从詹金斯没有像主詹金斯那样安装和启动吗?我假设我将以同样的方式安装一个主Jenkins和另一个从Jenkins,然后主Jenkins将控制从Jenkins例如通过ssh?所以我不能通过GUI查看奴隶詹金斯? 我考虑在另一个VM上添加从Jenkins的原因是因为VM包含我们的应用服务器(许多测试环境)。从master Jenkins部署和启动/停止应用程序服务器是一个难题,因为master

  • 有没有可能让詹金斯使用真正的浏览器而不是无头浏览器?我正在运行一些用TestNG编写的测试(使用Selenium webdriver)。当我运行testng时。在Eclipse中,浏览器启动并运行测试。但当我使用Jenkins并用maven运行测试时,它不会启动任何浏览器。