我的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?
答案 0 :(得分:1)
您需要定义ARG和ENV值。
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