我想直接使用 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/