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

标签 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 开始.sh"\''

最佳答案

$ 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"

关于bash - 如何使用 ssh 直接连接到远程 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52408764/

相关文章:

docker - 图坦构建后图像不存在

svn - 在 Jenkins 中配置 Subversion 插件以使用 1.6 工作副本

java - 使用 Java 运行 Bash 脚本

bash - 更新 bash 中 watch 命令中的变量

docker - 提交错误-使用Docker Toolbox和Windows 7时如何增加Docker默认容器大小

routing - 如何在 'docker build' 期间路由到 docker 容器中的主机

java - 如何将应用程序用户名和密码从jenkins传递到maven

linux - Jenkins Linux 文件访问或组问题

linux - 尝试在 bash shell 环境中从下载的 html 页面中获取 'grep' 链接,而无需 cut、sed、tr 命令(仅 e/grep)

linux - 在 vim 中执行打开默认编辑器命令