我有一个在几个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之类的东西来管理容器也会让您受益匪浅。