如何在生产环境的docker-compose中使用环境变量?

时间:2020-10-26 08:08:58

标签: docker docker-compose environment-variables dockerfile production-environment

我们如何在生产环境中为docker-compose指定环境变量?

例如,以下是我如何在开发环境的当前docker-compose文件中指定env变量的摘要:

environment: 
        - REDIS_HOST=redis
        - REDIS_PORT=6379
        - PGUSER=postgres
        - PGHOST=postgres
        - PGDATABASE=postgres
        - PGPASSWORD=postgres_password
        - PGPORT=5432

但是我不能在生产环境中做同样的事情,因为代码会在GitHub上推送,并且会暴露环境变量。

那么我们到底如何解决这个问题呢?

2 个答案:

答案 0 :(得分:2)

您可以将环境变量放在 .env 文件中。您不会在github中提交此文件。它就像一个配置文件。要了解有关 .env 文件的更多信息,可以进行以下检查: https://docs.docker.com/compose/env-file/

然后,您可以在compose文件中使用变量。您可以从这里检查它: https://docs.docker.com/compose/compose-file/#variable-substitution

添加所需的答案: 您可以根据生产或开发为环境变量设置不同的值。您也可以管理它。试试这个链接: https://docs.docker.com/compose/environment-variables/

您需要运行以下命令以将环境文件与撰写文件链接:

docker-compose --env-file your_environment_file_location up

为了发展,

docker-compose --env-file development_environment_file_location up

为了生产,

docker-compose --env-file production_environment_file_location up

希望,这个答案可以解决您的问题。

答案 1 :(得分:1)

您可以使用几种方法:

  • 一个可以是在每个环境中使用.ENV文件(您当然不必提交)

https://docs.docker.com/compose/environment-variables/#the-env-file

$ cat .env
TAG=v1.5

$ cat docker-compose.yml
version: '3'
services:
  web:
    image: "webapp:${TAG}"

通过这种方式,您可以在Docker Compose文件中定义变量,但不能定义实际值。

  • 其他选择是在Docker Compose命令中为变量传递这些值:
docker-compose run -e DEBUG=1 web python console.py

我个人更喜欢第一个。