pycharm ssh远程解释器连接docker容器环境变量缺失

背景介绍

利用pycharm ssh interpreter 运行部署在容器中的python文件,发现无法调用torch的gpu版本。
但是使用docker exec的方式进入容器不存在该问题。
通过在python的调试模式下执行os.environ,以及在容器中执行ENV,对比发现pycharm通过ssh远程登录执行程序的环境变量与docker exec进入容器的环境变量不同。

解决方案

首先参考了:https://blog.csdn.net/thlzjfefe/article/details/104777283

/etc/profile中添加了export $(cat /proc/1/environ |tr '\0' '\n' | xargs)

发现通过终端直接ssh登录容器,在shell中执行程序时可以获得正确的环境变量。但是:
使用pycharm ssh interpreter运行程序仍然无法获得/etc/profile中的环境变量。

经过网上调研,感谢博客https://blog.csdn.net/vivianXuejun/article/details/80557287
对bash的四种模式:interactive + login shell、non-interactive + login shell、interactive + non-login shell、non-interactive + non-login shell进行了详细的解释。
pycharm ssh远程解释器连接docker容器环境变量缺失

使用pycharm ssh interpreter直接远程运行程序属于non-interactive + non-login shell模式。程序执行前会根据BASH_ENV指定的配置文件进行加载。

通过echo BASH_ENV$,得到配置文件路径为:

/etc/bash.bashrc

export $(cat /proc/1/environ |tr '\0' '\n' | xargs)加入/etc/bash.bashrc中,问题成功解决。

上一篇:软件设计


下一篇:ViewPager实现TabHost动态添加、删除Fragment,用红色小圆球指示当前页面