各位大佬,遇到个很棘手的问题,我写了个java程序在docker容器中运行,但是我这个程序中有用Runtime.getRuntime().exec()去执行宿主机上的shell脚本,这个脚本是用来启动docker-compose.yml文件,但因为一个是在docker中运行,一个又是在宿主机上的文件,导致访问不到,我在网上看到用sshpass的,但这个方式并不安全,很容易暴露宿主机密码,还有没有别的更好的办法做到啊?
有好几个解决方法,你可以在Docker容器内部运行一个Docker守护进程,从而在容器中运行其他Docker容器。这样,Java程序就能够使用Docker命令来运行容器中的命令,而无需访问宿主机。
或者使用volume映射:
docker run -v /my-scripts:/scripts myimage
Runtime.getRuntime().exec("/scripts/myscript.sh");
from flask import Flask
import subprocess
app = Flask(__name__)
@app.route('/execute')
def execute_script():
subprocess.call(['/path/to/myscript.sh'])
return 'Script executed successfully'
if __name__ == '__main__':
app.run()
然后在Java程序中,使用HttpClient来调用这个API:
HttpClient httpClient = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://localhost:5000/execute"))
.build();
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
不知道你这个问题是否已经解决, 如果还没有解决的话: