Makefile:从一个Docker容器中提取一个env变量并在另一个Docker容器中使用它

时间:2018-12-07 11:26:37

标签: docker makefile environment-variables

我有一个可以在多个Docker容器上运行的应用程序。为了简化我的问题,假设我有3个容器:一个用于MySQL,两个用于2个api实例(共享代码所在的相同卷,但使用不同的env指定不同的数据库设置),如下所示docker-compose.yml

services:
  api-1:
    image: mynamespace/my-image-name:1.0
    environment:
      DB_NAME: db_api_1
  api-2:
    image: mynamespace/my-image-name:1.0
    environment:
      DB_NAME: db_api_2

Makefile中,我为每个api实例都有部署容器和安装数据库的规则。

我要实现的目标是创建一个make规则,该规则转储给定env的数据库。知道我的api实例上未安装MySQL客户端后,我认为应该有一种方法可以从api容器中提取我需要的env变量(使用printenv VARNAME),然后在数据库容器中使用它

任何人都知道如何实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

假设您使用-e选项将docker run设置为环境变量,则可以执行以下操作:

docker exec api_container sh -c 'echo $VARNAME'

如果是在容器内部设置的环境变量,例如从脚本开始,那么您基本上就不走运了。您当然可以检查/proc/<pid>/environ,但这很麻烦,我不建议这样做。

听起来好像您将从使用docker-compose之类的容器来管理中受益。