我为我的数据库服务器创建了一个docker镜像,为web应用程序创建了一个docker镜像。使用文档我可以使用环境变量在两个容器之间进行链接,如下所示:
value="jdbc:postgresql://${DB_PORT_5432_TCP_ADDR}:${DB_PORT_5432_TCP_PORT}/db_name"
现在工作正常,但环境变量更通用且不包含静态端口号会更好。类似的东西:
value="jdbc:postgresql://${DB_URL}:${DB_PORT}/db_name"
无论如何都要在环境变量之间建立联系?例如,通过使用dockerfile ENV DB_URL=$DB_PORT_5432_TCP_ADDR
中的ENV命令或通过运行图像docker run ... -e DB_URL=$DB_PORT_5432_TCP_ADDR docker_image
使用参数--env?
答案 0 :(得分:3)
如果没有在docker启动shell脚本或其他编排机制中构建此类功能,目前无法创建环境变量,就像您在此处描述的那样。你确实提到了几个解决方法。但是,至少在-e DB_URL=...
命令中使用docker run
的问题是,您的$DB_PORT_5432_TCP_ADDR
环境变量在运行时是未知的,因此您将无法在此时设置此值你运行它。通常,这是您的业务流程层用于服务发现以及在容器中传递此类数据的方式。至少有一个解决方法mentioned here on SO涉及构建一个特殊的shell脚本,该脚本放在CMD
或ENTRYPOINT
指令中,将环境变量传递给容器。