You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Go应用中获取Docker容器的环境变量?

嘿,这事儿其实挺 straightforward 的,Go 标准库就自带了现成的工具来读取环境变量,我给你拆解清楚怎么弄:

核心工具:os 包的两个函数

Go 的 os 包提供了两个常用函数来处理环境变量,根据你的需求选就行:

1. os.Getenv(key string)

这个函数最简单,直接传入环境变量的名称,返回对应的值;如果变量不存在,就返回空字符串。适合那些有默认值或者你能接受空值的场景。

举个例子:

package main

import (
    "fmt"
    "os"
)

func main() {
    // 读取Docker传递的环境变量
    dbName := os.Getenv("DB_NAME")
    dbUser := os.Getenv("DB_USER")
    dbHost := os.Getenv("DB_HOST")

    // 用这些变量初始化数据库连接(示例)
    fmt.Printf("正在连接数据库: %s@%s/%s\n", dbUser, dbHost, dbName)
}

2. os.LookupEnv(key string)

这个函数更严谨,会返回两个值:变量的值,以及一个布尔值表示变量是否存在。适合那些必填的配置项,你可以在变量缺失时抛出错误或者设置默认值。

比如处理数据库端口:

dbPort, exists := os.LookupEnv("DB_PORT")
if !exists {
    // 如果没传DB_PORT,用默认的5432(PostgreSQL默认)
    dbPort = "5432"
    fmt.Println("未设置DB_PORT,使用默认端口:", dbPort)
}
配合Docker传递变量的示例

运行容器时用 -e 传递变量,和代码里的变量名要完全一致(大小写敏感!):

docker run -e DB_NAME=myapp_db -e DB_USER=db_admin -e DB_HOST=192.168.0.10 -e DB_PORT=5432 your-go-image-name
进阶:用结构体管理配置

如果环境变量很多,把它们放到一个结构体里会更整洁,还能统一做校验:

type DatabaseConfig struct {
    Name     string
    User     string
    Host     string
    Port     string
    Password string
}

func LoadDBConfig() DatabaseConfig {
    cfg := DatabaseConfig{
        Name:     os.Getenv("DB_NAME"),
        User:     os.Getenv("DB_USER"),
        Host:     os.Getenv("DB_HOST"),
        Port:     os.Getenv("DB_PORT"),
        Password: os.Getenv("DB_PASSWORD"),
    }

    // 校验必填项,比如DB_NAME不能为空
    if cfg.Name == "" {
        panic("错误:必须设置环境变量DB_NAME")
    }

    return cfg
}

这样在代码里调用 LoadDBConfig() 就能拿到结构化的配置,用起来更方便~

内容的提问来源于stack exchange,提问作者Sredny M Casanova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:39:19