在代码中检索当前环境(Kotlin,Docker)

在代码中检索当前环境(Kotlin,Docker),docker,kotlin,Docker,Kotlin,我想检索有关应用程序运行位置的信息 假设我有一个DEV和PROD环境。在我的代码中,我希望检索应用程序正在运行的环境的链接,例如: 如果在开发环境中:https://dev.mycompany.com/myproduct/app 如果在产品环境中:https://mycompany.com/myproduct/app 任何提示?只需将其作为环境变量(例如,APP\u ENV)传递给您的应用程序,并使用System.getenv(“APP\u ENV”)访问它。顺便说一句,是的 传递给容器的方

我想检索有关应用程序运行位置的信息

假设我有一个DEV和PROD环境。在我的代码中,我希望检索应用程序正在运行的环境的链接,例如:

  • 如果在开发环境中:
    https://dev.mycompany.com/myproduct/app
  • 如果在产品环境中:
    https://mycompany.com/myproduct/app

任何提示?

只需将其作为环境变量(例如,
APP\u ENV
)传递给您的应用程序,并使用
System.getenv(“APP\u ENV”)
访问它。顺便说一句,是的

传递给容器的方式因启动方式而异

码头工人赛跑 传递变量,或将其存储在文件中,然后通过
--env file
传递整个文件:

docker run-e VAR1--env APP_env=dev--env file./env您的_图像:最新
Docker compose (注意,它们在文档中设置了
NODE_ENV
变量,就像您的案例一样!):

库伯内特斯 :

在k8s中,您可以在环境变量中添加另一个值,因此环境可以存储在元数据中


当然,还有其他方法可以为应用程序提供价值,如:

  • 代码生成和构建时替换。例如,它可以用来提供Git revision:Git rev parse的输出被替换到代码中的某个地方。需要额外的构建配置+对于不同的环境,您将需要不同的构建
  • 程序参数。只需运行
    应用程序arg1 arg2。。。开发。。。argn
    。与环境变量非常相似,但IMHO有一个缺陷:程序参数只能在程序的入口点(
    main
    )中访问,因此您需要解析它们并传递到应用程序的其他部分。我可以很好地进行一些动态输入,但对于静态数据(如应用程序的环境)不方便
  • 供应商元数据,如EC2。需要特定的API才能访问
正如您所看到的,它们都没有提供环境变量的灵活性、普遍性和简单性的组合

version: '3'
services:
  app:
    image: 'your_image:latest'
    env_file:
     - ./env
    environment:
     - APP_ENV=dev
spec:
  containers:
  - name: app
    image: your_app:latest
    env:
    - name: APP_ENV
      value: "dev"