使用 Nginx 代理到 Docker.sock 实现前端虚拟终端功能
可以通过 Nginx 代理到 Docker.sock 实现前端虚拟终端功能。具体实现方法如下:
- 在 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 文件。
-
在前端页面中使用 WebSocket 与 Nginx 建立连接,通过连接发送命令行请求,接收返回的命令行结果。
-
在 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 中配置将请求转发到对应的容器中。
- 在容器中安装类似于 ssh 的工具,例如 bash 或 sh,并将其作为默认的启动命令。
这样就可以在前端页面中输入命令行,并返回容器内运行的命令行结果了。需要注意的是,由于容器中的命令行工具并不是完整的终端,因此可能会有一些显示上的问题。
原文地址: https://www.cveoy.top/t/topic/kWyI 著作权归作者所有。请勿转载和采集!