Lando:环境变量执行错误

Lando: exec error with environment variables

我正在使用 Lando(Windows 10 Enterprise 上的 v3.0.0-rc.21)并尝试在我的 .lando.yml 中创建容器时设置环境变量:

services:
  appserver:
    type: ruby # the same for php, but didn't tested other types
  run:
    - export SOMENAME=somevalue

tooling:
  test:
    cmd: export SOMENAME=somevalue
    service: appserver

Lando 启动时似乎无法识别该命令,因为它抛出: OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"export\": executable file not found in $PATH": unknown

完全相同的错误发生在 lando ssh -c "export SOMENAME=somevalue" 或将其作为命令添加到 .lando.yml 中的工具部分(见上文)然后 运行 lando test.

但是、运行 在 lando 启动后来自 lando ssh 的相同命令可以正常工作:

lando ssh
www-data@81bd623b9c3a:/app$ export SOMENAME=somevalue
www-data@81bd623b9c3a:/app$ printenv SOMENAME
somevalue
www-data@81bd623b9c3a:/app$

这是 Lando 的错误吗?或者某些(哪个?)shell 命令应该以某种不同的方式调用?

你可以在 lando yaml 中使用这个 env_file:

env_file:
  - defaults.env

defaults.env中:

SOMENAME=somevalue

this

只是从评论中提取这个。最终得到了 Lando 覆盖 的解决方法,如下所示:

services:
  appserver:
    type: ruby # or other type
    overrides:
      environment:
        SOMENAME: somevalue

文档:https://docs.lando.dev/config/services.html#overrides

另一种解决方法——正如@LinPy 在他的回答中建议的那样——是使用外部 env_file

如果您想在 CLI 中使用变量,您可以这样做:

events:
  post-start:
    - appserver: "export PHP_IDE_CONFIG=\"serverName=appserver\""

运行 lando restart -y && lando ssh 然后通过 printenv | grep PHP_IDE_CONFIG

检查值