Docker:为什么我的项目有一个.env文件?

时间:2018-08-04 17:17:10

标签: docker docker-compose environment-variables dockerfile

我正在一个涉及Docker的小组项目,该小组项目具有一个.env文件,如下所示:

DATABASE_URL=xxx
DJANGO_SETTINGS_MODULE=xxx
SECRET_KEY=xxx

难道不是只在Dockerfile内声明了吗?如果是这样,制作.env文件有什么好处?

不确定我是否朝着正确的方向前进,但是this Docker Docs page说(强调我自己):

  

您的配置选项可以包含环境变量。撰写   使用shell环境中的变量值,其中   docker-compose已运行。例如,假设外壳包含   POSTGRES_VERSION=9.3,您将提供以下配置:

     

db:

  `image: "postgres:${POSTGRES_VERSION}"`
     

使用此配置运行docker-compose时,Compose在外壳程序中寻找POSTGRES_VERSION环境变量并将其值替换为该变量。对于本示例,Compose将图像解析为postgres:9.3在运行配置之前。

     

如果未设置环境变量,则Compose替换为空字符串。在上面的示例中,如果未设置POSTGRES_VERSION,则图像选项的值为postgres:

     

您可以使用.env文件设置环境变量的默认值,该文件会自动查找。在shell环境中设置的值会覆盖.env文件中设置的值。

如果我们使用的是.env文件,那么我的${...}文件中看不到某些docker-compose.yml语法吗?不过,我看不到任何类似的东西。

这是我们的docker-compose.yml文件:

version: '3'

services:
    server:
        build:
            context: ./server
            dockerfile: Dockerfile
        env_file: .env.dev
        command: python3 manage.py runserver 0.0.0.0:8000
        volumes:
            - ./server:/app
        ports:
            - "8500:8000"
        depends_on:
            - db
        stdin_open: true
        tty: true

    db:
        image: postgres

    client:
        build:
            context: ./client
            dockerfile: Dockerfile
        command: bash -c "npm install; npm run start"
        volumes:
            - ./client:/app
            - /app/node_modules
        ports:
            - "3000:3000"
        depends_on:
            - server

1 个答案:

答案 0 :(得分:1)

想法可能有个地方可以将秘密与docker-compose.yml分开,然后您可以将其保存在VCS中和/或共享。