前端需要传递以下信息:

  1. 命令行:要在容器内运行的命令行。
  2. 容器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

实现前端发送命令行后端通过nginx代理到dockersock上返回命令行在容器内运行的结果前端需要传递哪些nginx如何配置命令行和容器id写在哪里

原文地址: https://www.cveoy.top/t/topic/dBdQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录