我是以Docker image that has OracleXE installed on it开头的 . 此映像具有正在运行的实例,并配置了所有内容 .
我可以启动该图像,并且,无论是从交互式shell容器,还是通过ssh进入容器,我都可以轻松执行 sqlplus
.
要创建一个包含我想要的添加项的容器,例如新的oracle用户和表空间,我可以进入正在运行的容器并执行必要的 sqlplus
,然后使用我的新状态 docker commit
新图像 . 但是,我想在 Dockerfile
中捕获这些新变化 .
但是 . ..当我的Dockerfile尝试执行上面引用的相同命令时, PATH
上没有 ORACLE_HOME
;当我用 SSH
或交互式shell进入容器时,它显然会这样做 .
注意,链接到上面的原始Dockerfile使用以下命令设置PATH .
RUN echo 'export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe' >> /etc/bash.bashrc
RUN echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> /etc/bash.bashrc
RUN echo 'export ORACLE_SID=XE' >> /etc/bash.bashrc
执行RUN命令时以及通过交互式shell或SSH进入容器时,环境之间的区别是什么?请注意,这一切都以ubuntu 14.04映像开头 .
1 回答
见Bash manual entry on startup files .
当您以交互方式运行时,shell将执行其rcfiles:
在构建Dockerfile时,它正在运行非交互式shell:
你可以设置
BASH_ENV
来运行 . 或者在Dockerfile的每一行使用RUN bash --login <command>
或RUN . /etc/bash.bashrc && <command>
. 但这非常糟糕 .我会使用
ENV
dockerfile命令来设置这些变量 . 我不确定为什么原版会按照它的方式设置它们 .