随手记录遇到的vscode无法通过远程插件连接到docker容器中Linux系统的问题。

1.问题描述

         docker安装好Linux系统后,本想通过Windows系统上的vscode的Remote_SSH远程插连接docker中的linux系统进行远程开发,这样就不需要来回在Windows系统和Linux系统上来回同步文件,就算使用git做本地提交,也需要在两个系统之间来回进行文件同步。

        考虑到使用vscode有丰富的插件,即使在docker容器中也可以远程安装插件以方便开发时使用,因此决定采用本地vscode+远程编译环境的形式。

        Linux系统使用的是ubuntu 16.04的32位版本。系统安装好后可正常编译运行项目。本地vscode需要通过ssh连接到docker容器,但多次尝试后都提示启动vscode-server失败,原因并未明确提示。某度搜索看到某篇文章提醒到查看docker容器中的Linux系统上的报错日志,结果证明看日志确实是最快定位问题办法。日志提示node文件找不到,但查看Linux系统目录下的隐藏文件夹.vscode-server目录,node在vscode的commit_id对应目录下是存在的,但是一直提示找不到。

        考虑先前使用的ubuntu 14.04的镜像是可以通过vscode远程进行连接的,于是从Ubuntu 14.04的docker容器中完整拷贝了.vscode-server目录来替换Ubuntu 16.04中对应目录,但依然提示“找不到文件”。分析对比了两个docker容器区别:同一个文件在Ubuntu 14.04的容器中能执行,但在Ubuntu 16.04不能执行,但node文件却都是64位的程序。

        于是考虑32位的系统如何能运行64位的执行程序。根据下面的方法终于可以运行64的node执行程序,vscode远程连接时无法启动vscode-server的报错也随之消失。

2.解决方法:

        在docker中安装的Ubuntu系统为32位,宿主机的Windows系统一般都是64位的,使用的Visual Code都是64位程序,如果需要通过ssh连接到docker容器,则需要容器内部.vscode-server目录下有node程序且可正常执行。但vscode-server能下载到的Linux版本都是64位程序,此时就需要32位的系统支持64位程序的运行。

        经过研究,安装gcc-multilib后可支持64位程序运行。Ubuntu下使用apt install 安装即可。64位程序运行其实是需要libc6-amd64库来运行,默认的32位系统下并不存在这个库。gcc-multilib本身是为了32位系统编译生成64位的库,但既然可以通过它编译出64位的库,也就可以通过它安装相关的依赖来运行64位的程序。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐