如何在golang的不同容器中使用docker-compose文件变量?

时间:2017-09-25 11:41:41

标签: docker go docker-compose

.
├── articaleServer
│   ├── Dockerfile
│   ├── main.go
│   └── sources.json
├── butler
│   ├── Dockerfile
│   ├── main.py
│   └── requirements.txt
├── docker-compose.yml
├── frontEnd
│   ├── Dockerfile
│   ├── main.go
│   ├── tags.json
│   └── templates
│       ├── auth.html
│       ├── feed.html
│       ├── footer.html
│       ├── header.html
│       ├── main.html
│       └── today.html
└── server
    ├── Dockerfile
    ├── keys
    │   ├── app.rsa
    │   └── app.rsa.pub
    └── main.go

.ENV

MONGO_USERNSME=user
MONGO_USERNSME=password

我在docker-compose.yml的路径中有.env文件,我需要在其他容器(articaleServer,butler,server)中使用变量形式,如

mongoDBDialInfo := &mgo.DialInfo{
        Addrs:    []string{"mongodb://mongo:27017"},
        Username: os.Getenv("MONGO_USERNSME"),
        Password:  os.Getenv("MONGO_PASSWORD"),
    }

但是没有看到并通过nil

1 个答案:

答案 0 :(得分:1)

.env放在同一目录中的docker-compose.yml文件仅用于撰写文件中的变量替换。

另一方面,您可以定义env_file密钥以在运行时将env变量从文件传递到容器:

services: 
  some_service: 
    image: someimg
      env_file:
        - .env

它的作用类似于Dockerfiledocker run -e中的环境声明。

由于隐含的列表类型可以使用多个文件来覆盖特定服务的某些通用配置密钥。