如何用env文件构建Docker

时间:2017-12-25 12:57:24

标签: ruby-on-rails activerecord docker-compose dockerfile

我在docker build期间遇到了env文件。

我正在尝试为我的ruby项目构建docker镜像,该项目使用环境变量有很多原因。 其中一个原因是检查数据库是否可用(使用ActiveRecord::Base.connection),并基于使用某些主数据创建/更新数据库。

我可以通过docker run --env-file='.env'命令在docker运行期间使用env文件。

但是我想在我的docker build中使用那些ENV变量。

任何人都可以帮助我解决这种情况吗?

4 个答案:

答案 0 :(得分:1)

您还可以使用--build-arg设置构建环境变量。 documentation

上的示例

正如您所看到的,它等同于docker run --env,而--env-file没有一个

答案 1 :(得分:1)

我遇到过在 sed 命令中需要一个变量的情况。我使用了以下内容:

RUN source config.env; sed -i -r "s/^url=.*/url=${MONGODB_SERVER}/" /app/module/module.ini

变量可用性仅限于该特定命令,但这对我来说已经足够了。

答案 2 :(得分:1)

默认情况下,.env 文件包含可用于容器的变量,而不是容器的构建过程。同样,--env-file 参数设置一个文件来读取容器可用的变量,而不是构建过程。

在撰写本文时,似乎没有使用命令行参数为构建设置环境变量的本机方法,但有一种解决方法。您可以使用以下命令从命令行为 docker-compose (build) 设置不同的 .env 文件名/路径:

env $(cat /path/to/custom.file.env) docker-compose up

如果您(也)需要为容器设置一组不同的环境变量,请在您的 docker-compose.yml 中使用该文件的名称设置 env_file: 行。

答案 3 :(得分:0)

您可以在Dockerfile中添加true。 查看docker文档。