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 【问题描述】:我有一个奇怪的问题。我已经在 Jenkins 上配置了一个 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及vue项目与springboot项目(五.jenkins打包springboot服务且在docker中运行)
Jenkins+Docker+SpringCloud微服务持续集成(上)