可以通过 Nginx 代理到 Docker.sock 实现前端虚拟终端功能。具体实现方法如下:

  1. 在 Nginx 配置文件中添加如下配置:
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;
}

这里将 Nginx 代理到 Docker.sock,即 Docker 的 socket 文件。

  1. 在前端页面中使用 WebSocket 与 Nginx 建立连接,通过连接发送命令行请求,接收返回的命令行结果。

  2. 在 Nginx 中配置 upstream,将命令行请求转发到对应的容器中。

upstream docker {
    server unix:/var/run/docker.sock;
}

location /docker/exec {
    proxy_pass http://docker;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

这里将所有的命令行请求转发到名为 docker 的 upstream 中,然后在 upstream 中配置将请求转发到对应的容器中。

  1. 在容器中安装类似于 ssh 的工具,例如 bash 或 sh,并将其作为默认的启动命令。

这样就可以在前端页面中输入命令行,并返回容器内运行的命令行结果了。需要注意的是,由于容器中的命令行工具并不是完整的终端,因此可能会有一些显示上的问题。

使用 Nginx 代理到 Docker.sock 实现前端虚拟终端功能

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

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