我有一个使用名为的环境变量的应用程序REDIS_URL
.典型的REDIS_URL
是redis://172.17.0.5:6379/0
.我希望能够REDIS_URL
基于容器链接进行填充:
docker run --name redis -d redis docker run --name firehose --link redis:redis -e REDIS_URL="redis://$REDIS_PORT_6379_TCP_ADDR:$REDIS_PORT_6379_TCP_PORT/0" -d firehose/server
但是根据我如何逃避环境变量,它们要么在我的shell中在docker运行时进行求值并且是blank(redis://:/0
),要么作为文字字符串(redis://$REDIS_PORT_6379_TCP_ADDR:$REDIS_PORT_6379_TCP_PORT/0
)传递.
如何REDIS_URL
基于conatiner链接填充我的应用程序环境变量?
在$REDIS_PORT_6379_TCP_ADDR
和$REDIS_PORT_6379_TCP_PORT
变量不在时已知的docker run
执行命令,所以没有办法从主机建造它.
但是,有一种解决方法.在Dockerfile
对firehose/server
图像必须有一个CMD
或ENTRYPOINT
该决定是运行图像时,什么是执行命令.您可以在该命令周围放置一个包装器来构造REDIS_URL
变量.像这样的东西:
#!/bin/sh export REDIS_URL="redis://${REDIS_PORT_6379_TCP_ADDR}:${REDIS_PORT_6379_TCP_PORT}/0" <run command>
使用包装器脚本作为CMD
或ENTRYPOINT
中的Dockerfile
.