Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Docker变量在什么时候可用?_Ruby On Rails_Nginx_Docker - Fatal编程技术网

Ruby on rails Docker变量在什么时候可用?

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

我正在使用Rails进行一些工作,在我的数据库配置中,我有以下变量:

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