shell 脚本:ssh -t 与 docker exec -t 问题

2019-10-06 14:54发布

问题:

执行下面的 shell 脚本

sudo ssh -t ${node//[[:space:]]/} docker exec -t $(docker ps -f name=ucenter_api -q) curl localhost/alive

会报错

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Error: No such container: curl

而 ssh

sudo ssh -t ${node//[[:space:]]/} 

然后

docker exec -t $(docker ps -f name=ucenter_api -q) curl localhost/alive

可以正常执行,请问如何解决?

回答1:

解决了,1)要将 ssh 执行的脚本放在双引号中;2)要对 $ 进行转义。

sudo ssh ${node//[[:space:]]/} "docker exec -t \$(docker ps -f name=ucenter_api -q) curl localhost/alive"

也可以使用 xargs

sudo ssh ${node//[[:space:]]/} "docker ps -f name=ucenter_api -q | xargs -I {} docker exec -t {} curl localhost/alive"


回答2:

第一个只执行了ssh命令, docker命令是在$()命令替换里头执行的, 写在命令行的docker当做参数传给ssh了, 在docker前面加上;



标签: shell bash