如何使用ssh直接连接到远程docker容器

问题描述 投票:4回答:2

我想直接用ssh连接到远程运行的Docker容器。通常我可以

$ ssh -i privateKey user@host
$ docker ps #which will list all running containers
$ docker exec -it ***** bash deploy.sh # ***** is container id and this line run a deployment script 

但我需要从Jenkins管道运行这个脚本,我只有一次机会。经过多次尝试,我想出了这个

$ ssh -tt -i ~/privateKey user@host docker exec -it $(docker ps | grep  unique_text | cut -c1-10) /bin/bash deploy.sh

这对我的困境没有帮助,因为它会回归

"docker exec" requires at least 2 arguments.

这实际上意味着命令被截断在这里$(docker ps | grep ...

我的解决方案

sh 'ssh -tt -i $FILE -o StrictHostKeyChecking=no $USER@$HOST /bin/bash -c \'"docker exec -it $(docker ps | grep unique_text | cut -c1-10) bash start.sh"\''

bash docker jenkins ssh pipeline
2个回答
3
投票
$ ssh -tt -i ~/privateKey user@host docker exec -it $(docker ps | grep  unique_text | cut -c1-10) /bin/bash deploy.sh

这将使用本地计算机上的docker ps命令运行子shell,而不是远程计算机。您将要在远程服务器上的shell中处理该完整命令:

$ ssh -tt -i ~/privateKey user@host /bin/sh -c "docker exec -it $(docker ps | grep  unique_text | cut -c1-10) /bin/bash deploy.sh"

2
投票

解决此问题的最佳方法是在Jenkins中创建一个节点

步骤1 - 转到Manage Jenkins部分并向下滚动到Manage Nodes部分。

Manage Jenkins

第2步 - 单击New Node New Nodes

步骤3 - 为节点命名,选择Dumb slave选项,然后单击Ok。 Dumb Slave

步骤4 - 输入节点从机的详细信息。在下面的例子中,我们正在考虑将奴隶机器作为Windows机器,因此选择“让Jenkins控制这个Windows奴隶作为Windows服务”作为启动方法。我们还需要添加从节点的必要详细信息,例如节点名称和节点机器的登录凭据。单击“保存”按钮。输入名称为“New_Slave”的标签可用于配置作业以使用此从属机器。

Slave Machine1

完成上述步骤后,新节点机器将最初处于脱机状态,但如果正确输入了上一屏幕中的所有设置,则将联机。如果需要,可以随时使节点从机关闭。 Slave Machine2

在我的Jenkins管道中

node("build_slave"){
    sh 'docker exec -it $(docker ps | grep unique_text | cut -c1-10) bash deploy.sh'
}
© www.soinside.com 2019 - 2024. All rights reserved.