当前位置: 首页 > 知识库问答 >
问题:

在Jenkins slave上发出docker命令

裴良弼
2023-03-14

我有一个Jenkins master运行在Windows Server2016上。我需要能够运行linux容器来运行一些自动化的e2e测试。由于我不想讨论的原因,我无法在这台机器上启用hyper-v。这使我无法在Jenkins master上安装lcow和docker

相反,我所做的是在virtualbox中设置一个Ubuntu18.04VM,并在那里安装docker。我已经将VM配置为Jenkins从机,使用ssh作为Jenkins用户登录。我已经为该用户设置并配置了所有功能,使其能够在不使用sudo的情况下运行docker命令。如果我以jenkins用户的身份手动ssh到服务器,我可以毫无问题地运行docker命令。一切都按你所期望的方式进行。

然后,我设置了一个测试构建,以检查一切是否正常工作。问题是,当我尝试使用execute shell构建步骤运行docker命令时,我会得到docker:not found错误。据我所知,构建是作为正确的用户运行的。我在构建步骤中添加了who-u,以便检查构建是以哪个用户的身份运行的。

以下是构建的输出:

[TEST - e2e - TEST] $ /bin/sh -xe /tmp/jenkins16952572249375249520.sh
+ who -u
jenkins  pts/0        2018-08-10 16:43   .         10072 (10.0.2.2)
+ docker run hello-world
/tmp/jenkins16952572249375249520.sh: 3: /tmp/jenkins16952572249375249520.sh: docker: not found

正如我提到的,jenkins用户已被添加到docker组中,docker已被添加到$path(/snap/bin/):

jenkins@jenkins-docker-slave:~$ which docker
/snap/bin/docker
jenkins@jenkins-docker-slave:~$ $PATH
-bash:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: No such file or directory
jenkins@jenkins-docker-slave:~$ who -u
jenkins  pts/0        2018-08-10 16:43   .         10072 (10.0.2.2)
jenkins@jenkins-docker-slave:~$ cat /etc/group | grep docker
docker:x:1001:qctesting,jenkins

从这个片段中可以看到,通过以jenkins用户的身份登录服务器,我可以成功地运行docker命令:

jenkins@jenkins-docker-slave:~$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
 3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

共有1个答案

卢阳泽
2023-03-14

多亏了这个问题的答案,我终于想通了。看了这个答案后,我意识到我在Ubuntu上安装了错误的docker版本。我删除了以前的安装,并使用sudo curl-ssl https://get.docker.com/sh安装了正确的docker包。然后我重新启动了我的詹金斯奴隶,一切都开始工作了。

 类似资料:
  • 问题内容: 我有一个运行在Windows Server 2016上的Jenkins主服务器。我需要能够运行linux容器来运行一些自动化的e2e测试。出于某些原因,我无法在此计算机上启用hyper-v。这使我无法在Jenkins主服务器上安装lcow和docker 我要做的是在virtualbox中安装Ubuntu 18.04 VM,并在那里安装docker。我已经使用ssh将VM配置为Jenki

  • 我最近做了一个不和谐的机器人,有几个功能,这个机器人有一个先进的命令处理程序,我想知道如何做一个命令,在那里,机器人说什么你告诉它。 示例:“.say(消息)” bot以“(消息)”响应 这是我的命令处理程序 没有关于如何使用高级命令处理程序执行此操作的教程 现在的机器人是为了好玩,但我可能会使它成为适度。

  • 问题内容: 我可以在主机上运行docker命令吗?我安装在Docker容器中,现在可以以某种方式在主机上使用命令(在后台使用Docker容器的aws)吗? 我的情况是这样的:我在生产主机上有数据库备份。现在我有Jenkins cron作业,它将从db容器中获取sql文件,并将其放入服务器文件夹中。现在我还希望jenkins将此备份文件上传到AWS存储上,但是在主机上我没有安装aws,也不想在主机上

  • 问题内容: 我想为服务器做一些简单的日志记录,这是一个在Docker容器中运行的小型Flask应用程序。 这是Dockerfile 正如您在最后一行看到的那样,我将stderr和stdout重定向到文件。现在我运行这个容器并将其装入其中 并注意以下几点: 服务器正在运行,网站正在运行 没有 产量: 但是没有日志…但是,如果我进入容器,则可以在控制台中看到该应用程序正在生成输出。 使用Docker时

  • 问题内容: 我正在尝试构建自定义的tcserver docker映像。但是我在启动Web服务器和tomcat时遇到了一些问题。 据我了解,我应该使用ENTRYPOINT运行我想要的命令。 问题是,是否可以使用ENTRYPOINT运行多个命令? 还是应该创建一个小的bash脚本来全部启动? 基本上我想做的是: 但是我不知道这是否是一个好习惯,或者是否可行。 问题答案: 如果要在入口点运行许多命令,最