ruby-on-rails - Docker Compose:将环境变量暴露给链接服务

标签 ruby-on-rails oracle docker docker-compose fig

我正在与Docker Compose一起玩,以使容器运行带有Oracle后端的Rails App。

Dockerfile and docker-compose.yml

直到我的Docker容器尝试安装ruby-oci8 gem(这会查找一些特定于oracle的环境变量)之前,此方法才有效。

These variables are exposed in the oracle container's Dockerfile:

RUN 'export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe' 

问题是,如何将oracle容器上的此环境变量公开给Web容器?

最佳答案

这里的问题是Web容器需要一个oracle客户端来与db容器中的oracle数据库进行对话。这需要花点时间,因为oracle没有在apt-get上提供客户端,所以我从Oracle的站点下载了RPM,将它们放在vendor /中,并在dockerfile中做了以下操作:

FROM ruby:2.2.2

RUN apt-get update && apt-get install -y build-essential
RUN apt-get install -y libxml2-dev libxslt1-dev
RUN apt-get install -y libqt4-webkit libqt4-dev xvfb
RUN apt-get install -y nodejs
# Needed for Oracle Client
RUN apt-get install -y libaio1 libaio-dev

# Required for Oracle RPMs
RUN apt-get install -y alien

# Set up app at /code
ENV APP_HOME /code
RUN mkdir $APP_HOME
WORKDIR $APP_HOME

ADD vendor/*.rpm $APP_HOME/vendor/
# Oracle Client Environment Variables
ENV ORACLE_HOME /usr/lib/oracle/12.1/client64
ENV LD_LIBRARY_PATH $ORACLE_HOME/lib/:$LD_LIBRARY_PATH
ENV NLS_LANG American_America.UTF8
ENV PATH $ORACLE_HOME/bin:$PATH
# Set this so you don't have to type it in with rake db:create
ENV ORACLE_SYSTEM_PASSWORD myoraclecontainerspassword

# Install Oracle Client
RUN alien -i vendor/oracle-instantclient.rpm && alien -i vendor/oracle-sdk.rpm && alien -i vendor/oracle-sqlplus.rpm

ADD Gemfile* $APP_HOME/
RUN bundle install

ADD . $APP_HOME/

关于ruby-on-rails - Docker Compose:将环境变量暴露给链接服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29582033/

相关文章:

ruby-on-rails - 为数据库适配器指定了 sqlite3 但未加载 gem

ruby-on-rails - Rails session ID 为零

ruby-on-rails - 为什么会有如此多的 gem 被淘汰,您如何处理依赖关系?

nginx - 如何使用 Docker Compose 启动 2 个(或更多)Rocket.Chat 实例?

Docker Standard_init_linux.go :207: exec user process caused “no such file or directory”

docker - 在没有 Kubernetes 的本地开发环境中运行 Ambassador

javascript - Skrollr 无法在 Ruby on Rails 4 中工作

sql - ORA-00904 : invalid identifier in subquery (in select clause)

sql - 用通配符替换值(解析文本数据)

sql - 分层查询(如何检索中间节点)