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



我有一个在几个docker容器上运行的应用程序。为了简化我的问题,假设我有3个容器:一个用于MySQL,两个用于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(,然后在数据库容器中使用它。

有人知道这是怎么实现的吗?

假设它是一个使用-e选项设置为docker run的环境变量,则可以执行以下操作:

docker exec api_container sh -c 'echo $VARNAME'

如果是在容器中设置的环境变量,例如从脚本中设置的,那么您基本上运气不好。你当然可以检查/proc/<pid>/environ,但这很麻烦,我不推荐它。

听起来,使用docker compose之类的东西来管理容器也会让您受益匪浅。

最新更新