如何在 docker-compose in production 中使用环境变量?

How to use environment variables in docker-compose in production?

生产环境中docker-compose具体如何指定环境变量?

例如,下面是我如何在当前开发环境的 docker-compose 文件中指定环境变量的片段:

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

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

那么我们究竟如何解决这个问题呢?

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

然后就可以使用compose文件中的变量了。你可以从这个检查它: https://docs.docker.com/compose/compose-file/#variable-substitution

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

你需要运行这个命令到link环境文件和组合文件:

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

希望这个答案能解决您的问题。

您可以使用多种方式:

  • 一个可以是每个环境使用一个 .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

个人比较喜欢第一种