【发布时间】:2015-11-06 17:11:46
【问题描述】:
我有一种情况,当容器启动时,我需要 source 一个位于单独卷中的 bash 环境文件(通过 volumes_from 在 docker-compose 中拉入),以便将来在容器上运行的所有命令将在那个 bash 环境下执行(它运行一些脚本并设置许多从其他地方提取的动态变量)。我使用卷而不是直接将此命令添加到映像的原因是因为我需要包含的环境文件在 Dockerfile 上下文之外,而 Dockerfiles 不支持。
我尝试将source /path/to/volume/envfile 行添加到root 用户的.bashrc 文件中,希望它能够在容器启动时运行,但这不起作用。我假设这是因为在容器/shell 启动并且.bashrc 命令已经运行(这是有道理的)之后才真正安装卷。
有没有人知道我可以如何完成这样的事情?我对替代方法持开放态度,但是我无法在此处更改的一件事是将我需要的文件移动到 Docker 上下文中,因为这会破坏很多其他事情。
我的(稍微编辑过的)Dockerfile 和 docker-compose.yml 文件:https://gist.github.com/joeellis/235d90799eb647ab00ec
编辑:作为测试,我正在尝试在容器上运行rake db:create:all,例如docker-compose run app rake db:create:all,它返回一个错误,即无法找到/加载我需要的环境文件。有趣的是,如果我进入容器并运行命令,一切似乎都很好。所以也许当一个容器通过run得到一个命令时,它不一定会打开一个shell,而是使用别的东西?
【问题讨论】:
-
对我来说很好。你的基础镜像和运行命令是什么?
-
@ISanych 啊,很高兴知道我在正确的轨道上,如果它适合你。使用 Dockerfile 和 docker-compose.yml 文件编辑帖子
标签: docker dockerfile docker-compose