我有一个可以在多个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
),然后在数据库容器中使用它
任何人都知道如何实现这一目标吗?
答案 0 :(得分:0)
假设您使用-e
选项将docker run
设置为环境变量,则可以执行以下操作:
docker exec api_container sh -c 'echo $VARNAME'
如果是在容器内部设置的环境变量,例如从脚本开始,那么您基本上就不走运了。您当然可以检查/proc/<pid>/environ
,但这很麻烦,我不建议这样做。
听起来好像您将从使用docker-compose之类的容器来管理中受益。