在容器启动之前,我可以在单独的泊坞窗卷中的文件中运行bash脚本吗?

我有一个情况,我需要一个生活在一个单独的卷中的bash环境文件(通过volumes_from docker-compose volumes_from ),当一个容器启动时,所有未来的命令在容器上运行将在该bash环境下执行运行一些脚本,并设置从其他地方拉动很多dynamicvariables)。 我使用卷而不是直接将此命令直接添加到映像的原因是我需要包含的环境文件在Dockerfile上下文之外,而Dockerfiles不支持该文件。

我试图添加一个source /path/to/volume/envfile行到根用户的.bashrc文件,希望它将在容器启动时运行,但没有奏效。 我假设这是因为在容器/ shell启动并且.bashrc命令已经运行(这是有道理的)之前,卷并没有实际挂载。

有没有人有任何想法,我怎么能做到这样的事情? 我打开其他的方法,但是我不能在这里改变的一件事是移动我需要在Docker上下文中的文件,因为这会打破许多其他的东西。

我的(稍微编辑的)Dockerfile和docker-compose.yml文件: https ://gist.github.com/joeellis/235d90799eb647ab00ec

编辑:作为一个testing,我试图运行一个rake db:create:all在容器上,像docker-compose run app rake db:create:all返回一个错误,我所需要的环境文件无法find/加载。 有趣的是,如果我将shell放入容器并运行命令,这一切似乎都工作得很好。 所以也许当一个容器通过run命令,它不一定打开一​​个shell,但使用别的东西?

问题是你的/src/app/bin/start-app运行的shell不是交互式的shell => .bashrc不能被读取!

你可以通过这样做来解决这个问题:把env文件添加到:/root/.profile

 RUN echo "source /src/puppet/path/to/file/env/bootstrap" >> /root/.profile 

还可以通过(sh是无论如何bash通过Dockerfile中的hack bash)运行你的命令作为loginshell:):

 command: "sh -lc '/src/app/bin/start-app'" 

作为命令。 这应该工作正常:)问题真的只是缺less源文件,因为你运行在通过docker命令指令运行在非交互式shell。 它在shell中放入容器时起作用,因为bam你有一个交互式的shell来源文件:)