我有2个文件:
.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是一个Web服务应用程序,需要一个.env文件;或者,如果不存在.env文件,则可以选择访问环境变量。
到目前为止,myapp正在访问环境变量,因为出于安全原因,我不希望将.env文件包含在映像构建中。我所做的是将env_file: .env
文件中的docker-compose.yml
传递给myapp服务,这样它将依赖于服务的环境变量而不是.env文件。
现在,我真的想在运行docker-compose up
时向myapp服务中添加一个.env文件。请注意,如果myapp Web服务未找到.env文件,则将引发错误,该选项是查找.env文件,而不是从容器的环境变量获取。
运行docker-compose up
时是否可以创建.env文件并在主机上复制.env文件的内容?预先谢谢你。
答案 0 :(得分:3)
您可以使用bind mount将文件装载到容器中
将目标位置更改为您的应用所需的位置
ngAfterViewInit
答案 1 :(得分:2)
您不应将环境变量存储在容器中。
根据TwelveFactor-
十二个因素的应用程序将配置存储在环境变量中(通常缩写为env vars或env)。 Env var易于在部署之间进行更改,而无需更改任何代码。与配置文件不同,它们很少有可能被意外检入代码存储库;与自定义配置文件或其他配置机制(例如Java系统属性)不同,它们是与语言和操作系统无关的标准。
您正确传递了env文件。 env文件的格式必须为<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
在您的应用程序中,您无需关心.env文件是否存在,只需阅读环境变量即可。
python中的示例-
import os
db_username = os.environ['DB_USERNAME']
您不应将环境变量耦合到文件。它应该从运行时环境中读取。