【问题标题】:Docker Compose: Exposing Environment Variables to linked serviceDocker Compose:向链接服务公开环境变量
【发布时间】:2015-04-11 19:21:31
【问题描述】:

我正在使用 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容器?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你能加一行吗

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

      到您的网络 Dockerfile?

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

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

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

      【讨论】:

      • 这触及了实际的问题,即 ruby​​-oci8 gem 需要访问 oracle client,而 oracle xe 容器不提供。我必须在 docker 文件中添加一些行以从 RPM 安装客户端,然后为该安装添加必要的环境变量。
      猜你喜欢
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 2022-01-01
      • 2018-02-03
      • 2019-02-25
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多