如何使用SSH直接连接到远程Docker容器

时间:2018-09-19 14:56:35

标签: bash docker jenkins ssh pipeline

我想直接使用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"\''

2 个答案:

答案 0 :(得分: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中处理该完整命令:

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

答案 1 :(得分:2)

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

步骤1-转到“管理Jenkins”部分,然后向下滚动到“管理节点”部分。

Manage Jenkins

步骤2-单击新节点 New Nodes

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

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

Slave Machine1

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

在我的詹金斯管道中

node("build_slave"){
    sh 'docker exec -it $(docker ps | grep unique_text | cut -c1-10) bash deploy.sh'
}