能不能通过nginx代理到dockersock实现前端虚拟终端功能用户输入命令行返回容器内运行的命令行结果如何实现做到
可以通过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/dydW 著作权归作者所有。请勿转载和采集!