我知道我的问题已经在How to run shell script on host from docker container?中进行了讨论,但是我认为我的问题有点复杂。
首先,我尝试解释我的情况。我正在从CentOS VM(主机)中的Docker容器中使用jenkins2.x。在jenkins中,我创建了一个Job,可以从SVN中检出3个文件(2个Shell脚本和1个.jar文件)。这些文件将下载到jenkins docker容器中的jenkins工作区中,也将下载到已安装目录中的主机上,如下所示:
volumes:
- ${DATA_HOME}/jenkins/data:/var/jenkins_home
其中一个脚本将从jenkins job中执行,并执行另一个脚本。第二个脚本签出SVN目录并执行更多操作。
因此,我希望在该目录中有一个新的装入卷,所有执行的第二个脚本的结果都将放置在主机上。我认为通过“ SSH”连接到主机并执行脚本似乎很好,但是我该怎么做。
我希望我能解释我的问题可以理解
答案 0 :(得分:1)
我会回答有关“我认为通过'SSH'连接到主机并执行脚本似乎很好,但是我该怎么做”
将主机Ip传递给您的运行命令。
docker run --name redis --env pass=pass_my --add-host="hostmachine:192.168.1.23" -dit redis
现在
docker exec -it redis ash
并运行此命令。这将从容器到主机执行SSH
ssh user_name@hostmachine 'ls; bash /home/user_name/Desktop/test.sh; docker run --name db -dit db; docker ps'
如果您想要一些没有密码的东西,请在容器中设置ssh-key,或者也可以尝试
sshpass -p $pass ssh user_name@hostmachine 'ls;/home/user_name/Desktop/test.sh; docker run --name db -d
it db; docker ps'
或者如果您想运行容器内的脚本,也可以将脚本传递给ssh。
sshpass -p $pass ssh user_name@hostmachine < ./ab.sh
注意::$ pass是ENV
中主机的密码,hostmachine
是我们在运行命令期间设置的主机。
答案 1 :(得分:0)
基于答案中的注释:
我们只需安装任何SSH插件(SSH)或(通过SSH发布),然后 提供用户名/密码后,它将可以正常工作。
唯一需要注意的是,主机名解析不起作用,我们将需要提供IP地址。
如前所述,这不是最好的方法,但是有时从旧系统迁移时,我们需要一次移动一个步骤,这是最简单的步骤。