.envで定義した環境変数をDocker,docker-compseで使用する例

.envからdockerの実行環境に環境変数を渡す例

環境

go1.13.8
Docker version 19.03.8

ディレクトリ構成

Dockerfile
docker-compose.yaml
go.mod
main.go
.env
.env2

main.go

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println("hello world")
    fmt.Println(mustGet("TEST"))
}

func mustGet(arg string) string{
    env := os.Getenv(arg)
    if env == ""{
        panic("env not found")
    }
    return env
}

Dockerfile

FROM golang:latest
WORKDIR /app
COPY go.mod ./
RUN go mod download
COPY . .
RUN go build -o main .
CMD ["./main"]

docker-comose.yaml

version: "3"
services:
  web:
    build:
      context: .
      dockerfile: ./Dockerfile
    env_file: .env

.env

TEST=hoge

.env2

TEST=hoge2

結果

$go run main.go
panic
$TEST=hoge go run main.go 
hello world
hoge
$docker build . -t test
$docker run test
panic
$docker run --env-file .env test
hello world
hoge
$docker run --env-file .env2 test
hello world
hoge2
$docker-compose up
web_1  | hello world
web_1  | hoge