如何在 docker 容器中为非交互式 shell 设置环境变量?
How to set environment variable for non-interactive shell in docker container?
我正在使用命令 docker run -e GRB_WLSACCESSID=xxxxxxx
为 Gurobi 授权设置环境变量。容器的OS是Ubuntu16.04。如果我通过 SSH 交互登录容器并通过 python 代码 os.getenv()
.
读取环境变量,这就可以了
但是,当我在 Pycharm 中将此容器添加为远程 SSH 解释器并沿 Pycharm 执行 python 代码时,我无法获取环境变量。
最后发现问题是docker run -e
生成的环境变量只能通过交互shell读取。这可以通过执行 ssh root@x.x.x.x env
来验证,并在登录容器后交互式地执行 env
。前者产出少
一种可能的解决方案是在生成容器后手动编写一些配置,例如在/etc/environment
(由提供)中设置变量。
另一种可能的解决方案是在 Pycharm edit configuration
.
中手动添加变量
有没有更优雅的方案? :(
终于明白relevant answers
的具体含义了
这意味着,在远程VM或容器中,创建一个名为mypython
的linux脚本文件作为python包装器,内容为:
#!/bin/bash -l
/path/to/interpreter/bin/python "$@"
,其中 /path/to/interpreter/bin/python
是 python 解释器的路径。对于 conda 解释器,它可能看起来像 /root/miniconda3/envs/py37/bin/python
.
脚本 mypython
应该放在与二进制文件 python
相同的路径中,即 /root/miniconda3/envs/py37/bin/mypython
然后给mypython
加上执行权限:
chmod +x /root/miniconda3/envs/py37/bin/mypython
以上两步也可以通过命令替代执行:
echo '#!/bin/bash -l
/root/miniconda3/envs/py37/bin/python "$@"' > /root/miniconda3/envs/py37/bin/mypython
chmod +x /root/miniconda3/envs/py37/bin/mypython
最后,在Pycharm中添加SSH解释器,确保解释器路径为/root/miniconda3/envs/py37/bin/mypython
问题就解决了。
我正在使用命令 docker run -e GRB_WLSACCESSID=xxxxxxx
为 Gurobi 授权设置环境变量。容器的OS是Ubuntu16.04。如果我通过 SSH 交互登录容器并通过 python 代码 os.getenv()
.
但是,当我在 Pycharm 中将此容器添加为远程 SSH 解释器并沿 Pycharm 执行 python 代码时,我无法获取环境变量。
最后发现问题是docker run -e
生成的环境变量只能通过交互shell读取。这可以通过执行 ssh root@x.x.x.x env
来验证,并在登录容器后交互式地执行 env
。前者产出少
一种可能的解决方案是在生成容器后手动编写一些配置,例如在/etc/environment
(由
另一种可能的解决方案是在 Pycharm edit configuration
.
有没有更优雅的方案? :(
终于明白relevant answers
的具体含义了这意味着,在远程VM或容器中,创建一个名为mypython
的linux脚本文件作为python包装器,内容为:
#!/bin/bash -l
/path/to/interpreter/bin/python "$@"
,其中 /path/to/interpreter/bin/python
是 python 解释器的路径。对于 conda 解释器,它可能看起来像 /root/miniconda3/envs/py37/bin/python
.
脚本 mypython
应该放在与二进制文件 python
相同的路径中,即 /root/miniconda3/envs/py37/bin/mypython
然后给mypython
加上执行权限:
chmod +x /root/miniconda3/envs/py37/bin/mypython
以上两步也可以通过命令替代执行:
echo '#!/bin/bash -l
/root/miniconda3/envs/py37/bin/python "$@"' > /root/miniconda3/envs/py37/bin/mypython
chmod +x /root/miniconda3/envs/py37/bin/mypython
最后,在Pycharm中添加SSH解释器,确保解释器路径为/root/miniconda3/envs/py37/bin/mypython
问题就解决了。