如何在图像中设置docker env文件

时间:2018-07-16 15:21:33

标签: docker

我完全是docker newb,对此感到抱歉

我有独立的docker映像(某些节点应用), 我想在不同的环境中运行。

我想使用run RUN --env-file <path>设置环境文件 但是,我想使用映像内的环境文件(以便每个环境可以使用不同的文件), 而不是在服务器上。 所以是图像内部的路径。

有什么办法吗? 也许像“ cp”(docker cp [OPTIONS] CONTAINER:<path>) 但似乎不起作用。

这里的最佳做法是什么? 我说得通吗? 谢谢!!

2 个答案:

答案 0 :(得分:1)

Docker绑定挂载是将这样的配置文件注入正在运行的容器中的相当有效的方法。我不会尝试在构建的映像中描述所有可能的配置。而是让它成为从主机推送的配​​置。

选择一些特定的文件来保存配置。为了争辩,我们假设它是/usr/src/app/env。设置您的应用程序,但是它是为在启动时读取该文件而构建的。如果文件丢失,请确保该应用程序仍然可以启动,或者使用合理的默认设置在该文件中构建图像。

现在,当您运行容器时,它将始终从该已知文件中读取设置;但是,您可以指定将存在的主机文件:

docker run -v $PWD/env.development:/usr/src/app/env myimage

现在,您可以在本地拥有一个env.development,用于指定扩展日志记录和本地数据库,以及一个env.production,该日志记录和指向生产数据库的最少。如果您设置了第三个环境(例如,其中包含一些已知数据的共享测试数据库),则可以使用此新配置运行容器,而无需重建它。

答案 1 :(得分:0)

以下是运行docker的命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG ...] 例 docker run --name test -it debian

关注以下开关

sudo docker run -d -t -i -e REDIS_NAMESPACE='staging' \ 
-e POSTGRES_ENV_POSTGRES_PASSWORD='foo' \
-e POSTGRES_ENV_POSTGRES_USER='bar' \
-e POSTGRES_ENV_DB_NAME='mysite_staging' \
-e POSTGRES_PORT_5432_TCP_ADDR='docker-db-1.hidden.us-east-1.rds.amazonaws.com' \
-e SITE_URL='staging.mysite.com' \
-p 80:80 \
--link redis:redis \  
--name container_name dockerhub_id/image_name

启动脚本示例:

$ docker run --env-file ./env.list ubuntu bash

以防万一,您有许多环境变量,尤其是要隐秘的情况下,可以使用env-file

  SELECT AdjusterName,    
   SUM(CASE WHEN TaskDate >= DATEADD(WEEK, DATEDIFF(WEEK, 0, SYSDATETIME()), 0)
            AND  TaskDate <  DATEADD(WEEK, DATEDIFF(WEEK, 0, SYSDATETIME()) + 1, 0)
            THEN 1 ELSE 0 END) AS WTD,
   sum(case when MONTH(TaskDate) = MONTH(GetDate()) then 1 else 0 end ) as MTD, 
   sum(case when year(TaskDate) = year(GetDate()) then 1 else 0 end ) as YTD

FROM   cte
GROUP BY AdjusterName
  

-env-file标志将文件名作为参数,并期望每个   行采用VAR = VAL格式,模仿传递给的参数   --env。注释行只需以#

为前缀