代码之家  ›  专栏  ›  技术社区  ›  wobsoriano

在Docker撰写过程中如何将文件内容复制到服务?

  •  0
  • wobsoriano  · 技术社区  · 5 年前

    我有两个文件:

    .env
    docker-compose.yml
    

    docker-compose.yml如下所示:

    version: '3'
    
    services:
      database:
        image: mysql:5.7
      myapp:
        image: me/some-image
        depends_on:
          - database
        env_file: .env
    

    myapp是一个需要.env文件的Web服务应用程序,如果不存在.env文件,它也可以访问环境变量。

    到目前为止,myapp正在访问环境变量,因为出于安全原因,我不希望.env文件包含在映像构建中。我所做的就是通过 env_file: .env 到中的myapp服务 docker-compose.yml 文件,因此它将依赖于服务的环境变量而不是.env文件。

    现在,我真的想在运行时向myapp服务添加一个.env文件 docker-compose up .请注意,如果myapp Web服务找不到.env文件,它将抛出一个错误,选项是查找.env文件,而不是从容器的环境变量中获取。

    运行时是否可以创建.env文件? Docker合成 在主机上复制.env文件的内容?提前谢谢。

    2 回复  |  直到 5 年前
        1
  •  1
  •   Piakkaa    5 年前

    version: '3'
    
    services:
      database:
        image: mysql:5.7
      myapp:
        image: me/some-image
        depends_on:
          - database
        env_file: .env
        volumes:
          - type: bind
            source: ./.env
            target: /envfile/.env
            readonly: true
    
        2
  •  1
  •   shreyashag    5 年前

    根据 TwelveFactor

    十二因子应用程序将配置存储在环境变量中(通常简称为env vars或env)。在不改变任何代码的情况下,部署EVV VAR很容易;不像配置文件,意外地被检查到代码RPO的可能性很小;并且不同于定制配置文件或其他配置机制(如Java系统属性),它们是语言和OS无关的S。标准。

    <key>=<value>

    DB_USERNAME=user
    DB_PASSWORD=password
    DB_SCHEMA=db
    DB_PORT=3306
    DB_HOST=db
    
    REDIS_HOST=redis
    REDIS_PORT=6379
    REDIS_DB=0
    

    import os
    db_username = os.environ['DB_USERNAME']
    

    不应将环境变量耦合到文件。它应该从运行时环境中读取。