将Laravel .env变量传递给Dockerfile

时间:2018-11-09 09:05:12

标签: laravel docker dockerfile

我的Dockerfile中有安装NewRelic php客户端的代码

RUN \
  curl -L https://download.newrelic.com/php_agent/release/newrelic-php5-8.3.0.226-linux.tar.gz | tar -C /tmp -zx && \
    NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 /tmp/newrelic-php5-*/newrelic-install install && \
      rm -rf /tmp/newrelic-php5-* /tmp/nrinstall* && \
        sed -i -e 's/"REPLACE_WITH_REAL_KEY"/"${MY_NEWRELIC_KEY}"/' \
     -e 's/newrelic.appname = "PHP Application"/newrelic.appname = "MyApp"/' \
         /usr/local/etc/php/conf.d/newrelic.ini

如何将Laravel .env文件中定义的变量MY_NEWRELIC_KEY传递给DockerFile?

1 个答案:

答案 0 :(得分:1)

您需要定义ARGENV值。 ARG也称为build-time变量。仅在通过Dockerfile指令在ARG中“宣布”它们的那一刻才可用,直到构建图像为止。 在您使用ENV指令进行介绍时,ENV变量在构建期间也可用。 这是一个Dockerfile示例,既有默认值,也没有默认值:

ARG some_variable
# or with a hard-coded default:
#ARG some_variable=default_value

RUN echo "Oh dang look at that $some_variable"

从命令行构建Docker映像时,可以使用ARG设置–build-arg值:

$ docker build --build-arg some_variable=a_value

使用上面的Dockerfile运行该命令将导致打印以下行(以及其他行):

Oh dang look at that a_value

这是一个基本的Dockerfile,使用了硬编码的ENV默认值:

# no default value
ENV blablabla
# a default value
ENV foo /bar
# or ENV foo=/bar

# ENV values can be used during the build
ADD . $foo
# or ADD . ${foo}
# translates to: ADD . /bar

这是一个使用动态构建环境值的Dockerfile示例:

# expect a build-time variable
ARG A_VARIABLE
# use the value to set the ENV var default
ENV an_env_var=$A_VARIABLE
# if not overridden, that value of an_env_var will be available to your containers!

如果您使用docker-compose,则可以在文件(link)中进行设置: 版本:“ 3”

services:
  php:
    image: my_php
      environment:
        - MY_NEWRELIC_KEY=keykey

编辑: 您可以指定一个文件来读取值。 上面的文件称为env_file(任意名称),它位于当前目录中。您可以引用文件名,对文件名进行解析以提取要设置的环境变量:

$ docker run --env-file=env_file php env

对于docker-compose.yml文件,我们仅引用一个env_file,Docker对其进行解析以设置变量。

version: '3'

services:
  php:
    image: php
      env_file: env_file