我已经尝试了2个小时,将此SSH远程执行的命令重写为多行形式,以使其更具可读性,但是每次遇到问题时,我都会这样做。我尝试了类似问题中所述的多种方法,但我只是对BASH感到厌倦。我正在尝试
echo "Deploying $1 to remote"
sudo ssh -i ../keys/key.pem username@$2 '
id=$(docker ps -a -q -f name=$1); if [ -n "$id" ]; then docker rm --force $1; fi;
docker run -d --network host -v /var/log/$1/:/var/log/$1/
-e SERVER_PORT=80
--name $1 username/image:$1'
我想使用一些远程创建的参数($id
远程运行docker映像,并在执行该脚本之前$1, $2
进行本地扩展。
答案 0 :(得分:2)
如果将其作为独立脚本编写,您可能会发现它更容易编写:
#!/bin/sh
container="$1"
id=$(docker ps -aq -f name="$container")
if [ -n "$id" ]; then
...
fi
...
手动在目标系统上运行此命令,以确保它可以执行您想要的操作。
一旦有了,就可以复制脚本并在两个单独的命令中运行它:
echo "Deploying $1 to remote"
scp -i ../keys/key.pem launch-container.sh "username@$2:/tmp/launch-container.sh"
ssh -i ../keys/key.pem "username@$2" sh /tmp/launch-container.sh "$1"
您还可能会研究专门为此类任务而构建的各种系统自动化工具。我偏爱Ansible,因为它不需要专用的服务器,不需要像显示的那样通过ssh进行工作;它有a set of Docker-related commands可以相当直接地完成这组任务。