Передача переменной .env Laravel в Dockerfile - PullRequest
0 голосов
/ 09 ноября 2018

В моем Dockerfile есть код, устанавливающий PHP-клиент NewRelic

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

Как передать переменную MY_NEWRELIC_KEY, определенную в файле .env Laravel, в DockerFile?

1 Ответ

0 голосов
/ 09 ноября 2018

Вам необходимо определить значения 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, использующего динамические значения env при сборке:

# 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, вы можете установить его в файле ( ссылка ): версия: '3'

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

EDIT : Вы можете указать файл для чтения значений. Файл выше называется 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...