Docker 撰写:将环境变量公开给链接服务

Docker Compose: Exposing Environment Variables to linked service

我正在研究 Docker Compose 以制作一个容器 运行 具有 Oracle 后端的 Rails 应用程序。

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容器?

你能加一行吗

ENV ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe

到您的网络 Dockerfile?

有一些关于在 docker-compose 中支持环境变量的讨论,但它围绕在 docker-compose.yml 中支持来自主机系统的变量展开。

目前没有讨论对您的问题有帮助的内容。

https://github.com/docker/compose/issues/495

这里的问题是 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/