Docker 服务在 Jenkins 的 deploy-over-SSH 上退出,但手动成功

Posted

技术标签:

【中文标题】Docker 服务在 Jenkins 的 deploy-over-SSH 上退出,但手动成功【英文标题】:Docker service exits on deploy-over-SSH from Jenkins but manually succeeds 【发布时间】:2021-03-28 15:17:45 【问题描述】:

我有一个奇怪的问题。我已经在 J​​enkins 上配置了一个 SSH_USER,并尝试使用“deploy-over-SSH”部署一个简单的 docker-service。 每次我部署它时退出如下,并且日志只是说“终止”

$ docker ps -a
CONTAINER ID  IMAGE                      COMMAND               CREATED         STATUS                       PORTS                   NAMES
bea48e1ee755  localhost/my-image:latest  /bin/sh -c npm ru...  13 seconds ago  Exited (143) 13 seconds ago  0.0.0.0:6007->3000/tcp  my-cont
$ docker logs my-cont
Terminated

但如果我尝试在具有相同 SSH_USER 的同一台服务器上手动运行,我可以成功运行 docker 容器。

docker run -d -it -p 6007:3000 --name my-cont my-image
$ docker ps -a
CONTAINER ID  IMAGE                      COMMAND               CREATED         STATUS          PORTS                   NAMES
nce48e1ee721  localhost/my-image:latest  /bin/sh -c npm ru...  21 minutes ago  21 minutes ago  0.0.0.0:6007->3000/tcp  my-cont

我通过 SSH 运行的脚本非常简单,来自 Jenkins,我从 Jenkins 传递端口,

$ bash ./run.sh $Port
docker run -d -it -p $1:3000 --name my-cont my-image

不知道是什么原因造成的。

【问题讨论】:

当 jenkins 尝试执行自己的容器时,您确定您手动执行的容器没有运行吗?两个容器都想在同一个端口 6007 上发布端口,所以在这种情况下它们可能会相互阻塞。 是的,我确保没有端口重叠,奇怪的是,如果我在同一目标服务器中创建一个简单的 cronjob 并运行脚本“run.sh”,它会像上面一样失败并出现同样的错误。奇怪。 观察:使用 docker 命令作为 cronjob 的脚本失败(看起来 Jenkins 没有问题),$ docker -v podman version 1.9.3 $ podman -v podman version 1.9.3 $ cat /etc/redhat -release Red Hat Enterprise Linux 8.2 版 (Ootpa) 尝试从您的命令中删除“-it”键。 将 podman 版本升级到 'podman version 2.0.5' 解决了这个问题。奇怪但错误或行为从未给出任何关于版本的线索。谢谢 【参考方案1】:

正如我在评论中提到的,升级“podman version 2.0.5”版本对我有用。 错误或 docker 日志从未给我任何提示,关于版本的线索。 但这就是解决方案。感谢您的 cmets。

【讨论】:

Podman 不是 docker,是竞品,docker 无法控制 podman 实现的命令。

以上是关于Docker 服务在 Jenkins 的 deploy-over-SSH 上退出,但手动成功的主要内容,如果未能解决你的问题,请参考以下文章

使用Docker安装Jenkins服务

docker 运行jenkins及vue项目与springboot项目(五.jenkins打包springboot服务且在docker中运行)

使用Jenkins docker镜像运行Jenkins服务

Jenkins+Docker+SpringCloud微服务持续集成(上)

Jenkins—— Jenkins+Docker+SpringCloud微服务持续集成项目优化和集群

Jenkins+Docker+SpringCloud微服务持续集成(下)