【问题标题】:.NET Core in Linux not reading environment variableLinux 中的 .NET Core 未读取环境变量
【发布时间】:2019-01-21 04:43:17
【问题描述】:

我正在尝试从 Linux 中的环境变量中获取 connectionString,但问题是它返回 null。

当我在终端中输入 printenv connectionString 时,它会返回变量,但在我编写 System.Environment.GetEnvironmentVariable("connectionString") 的应用程序内部,它会返回 null。

有人知道为什么会这样吗?

附言我正在 Docker 中运行应用程序。

【问题讨论】:

  • 你在容器内执行'printenv connectionString'吗?
  • @mjcs 不,我如何在容器内执行它,因为我只是在终端中执行它
  • docker exec -it “container-id” /bin/bash
  • @mjcs 是的,它返回了 null,所以我使用 export connectionString=... 添加了它,但是当我运行图像时它仍然是 null

标签: linux docker asp.net-web-api .net-core environment-variables


【解决方案1】:

问题是来自主机的环境变量在 docker 容器中不可用。要将环境变量传递给容器,您需要在运行命令中使用以下参数。

docker run -e NAME=VALUE ...

您还可以使用文件在容器内设置多个环境变量(当您不希望 bash 历史记录中包含敏感数据时也很有用)。

docker run --env-file=env_file_name ...

看看Environment variables in docker

【讨论】:

  • 我正在尝试运行docker run -e connectionString connectionStringValue containerName,它告诉我docker: invalid reference format: repository name must be lowercase.。当我运行docker run containerName -e connectionString connectionStringValue 时,它会抛出Unhandled Exception: System.FormatException: The short switch '-e' is not defined in the switch mappings.
  • 是的,现在它可以工作了,但是有没有其他方法可以从环境变量中获取它,所以我不需要写很多 -e NAME=VALUE,因为在我的应用程序中有 10 个或更多,我只需要从环境中获取那些
  • 在我的回答中,我描述了使用文件的选项,这个文件可以包含多个环境变量。
猜你喜欢
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多