将 Docker ENV 变量传递给 rails 应用程序

Pass Docker ENV variable to rails app

我正在使用 docker 容器测试 rails 应用程序。我想要做的是使用 -e 标志在 运行 处传递一个 ENV 变量,如下所示: docker run -p 3000:3000 -d -e "DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+')" somerepo/image:tag。我知道这是有效的,因为当我 bash 进入容器并且 运行 env 我得到正确的变量集:

$ env
HOSTNAME=1641e2f6c81f
GEM_HOME=/usr/local/bundle
DOCKER_HOST=172.17.0.1
...

当我尝试在 rails 应用程序的 mongoid.yml 中设置时,如下所示:

production:
  clients:
    default:
      database: somerailsdb
      hosts:
        - ${DOCKER_HOST}:27017
      options:
  options:

我在尝试获取数据库记录时遇到以下 mongodb 错误:

App 10040 stdout: D, [2016-01-10T11:40:07.085516 #10040] DEBUG -- : MONGODB | getaddrinfo: Name or service not known

这告诉我没有在应用程序中设置该值。如何在 mongoid.yml 配置文件中正确传递它?

mongoid.yml 中使用环境变量值的语法是:

production:
  clients:
    default:
      database: somerailsdb
      hosts:
        - <%= ENV['DOCKER_HOST'] %>:27017
      options:
  options: