Lando环境变量配置报错:export命令无法识别问题咨询
这不是Lando的Bug,是命令执行方式的问题!
你遇到的报错根源很明确:export是Shell的内置命令,不是一个独立的可执行程序。Lando在处理run或tooling里的命令时,默认会直接尝试启动一个可执行文件,而不是通过Shell去解析内置命令,所以系统找不到名为export的可执行文件,就抛出了那个错误。
而你通过lando ssh进入容器后,已经处于Shell环境中,此时export是由Shell自身处理的内置命令,自然就能正常运行了。
两种解决办法,推荐第二种更省心
办法一:让Lando通过Shell执行命令
如果一定要在run或tooling里用Shell内置命令,你需要明确调用Shell(比如bash),把命令作为参数传递进去。修改你的配置如下:
调整run配置:
services: appserver: type: ruby run: - bash -c "export SOMENAME=somevalue"
调整tooling配置:
tooling: test: cmd: bash -c "export SOMENAME=somevalue" service: appserver
这样Lando会先启动bash进程,再由bash来解析执行export命令,就不会报错了。
办法二:用Lando原生的环境变量配置(推荐)
其实Lando本身就提供了专门配置容器环境变量的方式,比用export命令靠谱得多,而且配置更简洁。直接在services里添加env字段就行:
services: appserver: type: ruby env: SOMENAME: somevalue
这种方式会在容器启动阶段就直接把环境变量设置好,容器内的所有进程都能读取到,完全不需要依赖Shell命令。
验证效果
用第二种办法配置后,你可以直接执行lando ssh -c "printenv SOMENAME",就能看到输出somevalue,环境变量已经生效啦。
内容的提问来源于stack exchange,提问作者Eugen Baryshnikau
相关产品推荐
相关产品推荐

