Ruby on rails Docker变量在什么时候可用?
我正在使用Rails进行一些工作,在我的数据库配置中,我有以下变量:Ruby on rails Docker变量在什么时候可用?,ruby-on-rails,nginx,docker,Ruby On Rails,Nginx,Docker,我正在使用Rails进行一些工作,在我的数据库配置中,我有以下变量: host: <%= ENV['MYSQL_PORT_3306_TCP_ADDR'] %> 它运行良好(这是之前报告的值) 所以我的问题是,docker运行期间,docker环境变量设置在什么点?我做错什么了吗?我想我会很乐意将nginx作为Dockerfile中的最后一个命令,但是如果环境变量仍然没有设置,那就不会解决任何问题 更新 我正在使用此网页中的Dockerfile- 更新2 Docker Run:Doc
host: <%= ENV['MYSQL_PORT_3306_TCP_ADDR'] %>
它运行良好(这是之前报告的值)
所以我的问题是,docker运行期间,docker环境变量设置在什么点?我做错什么了吗?我想我会很乐意将nginx作为Dockerfile中的最后一个命令,但是如果环境变量仍然没有设置,那就不会解决任何问题
更新
我正在使用此网页中的Dockerfile-
更新2
Docker Run:Docker Run--rm--name nginx-p 80:80--link mysql:mysql myNginxImage引用的Docker文件有:
# Use baseimage-docker's init system.
CMD ["/sbin/my_init"]
如果在执行docker run命令时不覆盖它,那么这就是“入口点”(我猜,问题中也没有提到)。接下来是一连串的猜测,但是,我想我猜对了:-)
首先,文件规定:
乘客的工作方式像一个mod_ruby、mod_nodejs等。它改变了Nginx
并从Nginx运行应用程序。所以要
您的web应用程序已启动并运行,您只需添加一个虚拟主机条目即可
到Nginx,它描述了你的应用程序在哪里,乘客将乘坐
照顾其余的人
然后,稍后在描述Nginx启动时:
默认情况下,Nginx将清除所有环境变量(TZ除外),以用于
子进程(乘客是其中之一)。这就是为什么会有
使用docker run-e、docker linking和
/etc/container\u环境,无法到达Nginx
对于init行为来说,在启动流程之前清除env变量是非常典型的。由于nginx已清除其环境变量,因此它随后启动的任何进程也将清除环境变量。幸运的是,它们告诉您如何将变量传播到子流程:
要保留这些变量,请放置一个以结尾的Nginx配置文件
*.conf,在目录/etc/nginx/main.d中,告诉nginx保留这些变量。例如,链接PostgreSQL时
容器或MongoDB容器:
然后给出一个例子。您可以在Dockerfile所在的同一目录中创建一个名为mysql-env.conf的文件,该文件包含:
env MYSQL_PORT_3306_TCP_ADDR;
然后,在Dockerfile中,放入以下行:
ADD mysql-env.conf /etc/nginx/main.d/mysql-env.conf
这将为您泄漏环境变量。当您第一次启动容器时,该容器的“入口点”将设置所有环境变量。如果您可以显示Dockerfile,以及没有获取环境变量的流程的启动位置,这会有所帮助。(从入口点到您的流程的所有程序/脚本都失败了,如果存在链的话)。我可能应该阅读更多关于入口点的内容-添加Dockerfile源代码。我应该问一下,我也想看到docker为此运行命令:-)这是一个令人惊讶的好答案,我错过了文档中的这个简介。非常感谢。
ADD mysql-env.conf /etc/nginx/main.d/mysql-env.conf