实现前端发送命令行后端通过nginx代理到dockersock上返回命令行在容器内运行的结果前端需要传递哪些nginx如何配置命令行和容器id写在哪里
前端需要传递以下信息:
- 命令行:要在容器内运行的命令行。
- 容器ID:指定要运行命令的容器ID。
在nginx中,可以使用proxy_pass指令将请求代理到docker.sock上。配置如下:
location /docker/ {
proxy_pass http://unix:/var/run/docker.sock:;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
在前端中,可以使用AJAX或Fetch API向/docker/containers/{id}/exec发送POST请求,其中{id}是容器ID。请求体应该包含以下内容:
{
"Cmd": ["<COMMAND>"],
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"Tty": false
}
其中<COMMAND>是要在容器内运行的命令。可以使用JSON.stringify()将请求体转换为字符串,并将其作为请求的data属性发送。请求的Content-Type头应该设置为application/json。
后端应该解析请求体并将其转发到docker.sock上。docker.sock将返回一个exec对象,该对象包含要在容器内运行的命令的进程ID。可以使用/docker/exec/{id}/start端点将该命令发送到容器,并使用/docker/exec/{id}/json端点获取命令的输出。在前端中,可以使用类似以下代码的方式获取命令的输出:
fetch('/docker/exec/{id}/json')
.then(response => response.text())
.then(output => console.log(output));
其中{id}是exec对象的ID
原文地址: https://www.cveoy.top/t/topic/dBdQ 著作权归作者所有。请勿转载和采集!