Как оценить переменную среды в Dockerfile? - PullRequest
0 голосов
/ 31 марта 2020

Я хочу использовать значение локальной переменной среды, хранящейся в файле .env в Dockerfile, почти так же, как вы можете сделать с docker -compose. Мой скрипт выглядит следующим образом.

#!/bin/bash
source $(pwd)/.env

echo "Building new training container image..."
docker build \
        -t "rasa_training_img" \
        --build-arg RASA_VERSION \
        ./rasa-training

echo "Build finished. Running container..."
docker run \
        -v $(pwd)/rasa-server:/app \
        --name "rasa_training_cont" \
        rasa_training_img

А Dockerfile выглядит так:

# FROM rasa/rasa:1.9.4-spacy-de
FROM rasa/rasa:$RASA_VERSION-spacy-de

COPY ./utils /training-utils

# install necessary python packages
USER root
RUN pip install -r training-utils/requirements.txt
USER 1001

# execute training steps script
ENTRYPOINT [ "/bin/bash" ]
CMD [ "training_steps.sh" ]

Когда я пытаюсь запустить его таким образом, он выдает следующий вывод:

Step 1/7 : FROM rasa/rasa:$RASA_VERSION-spacy-de
invalid reference format

Также пробовал с фигурными скобками:

Step 1/7 : FROM rasa/rasa:${RASA_VERSION}-spacy-de
invalid reference format

Есть ли способ получить доступ к значению переменной (как можно сделать с docker -compose)? Я знаю, что мог бы в основном заменить свой скрипт на docker -композитный файл, но я хочу избежать этого.

1 Ответ

0 голосов
/ 31 марта 2020

Переменные окружения могут быть переданы в качестве аргументов сборки при вводе команды docker build.

В вашем Dockerfile над строкой FROM добавьте следующее.

ARG RASA_VERSION=${RASA_VERSION}
# FROM rasa/rasa:1.9.4-spacy-de
FROM rasa/rasa:${RASA_VERSION}-spacy-de
COPY ./utils /training-utils

# install necessary python packages
USER root
RUN pip install -r training-utils/requirements.txt
USER 1001

# execute training steps script
ENTRYPOINT [ "/bin/bash" ]
CMD [ "training_steps.sh" ]

В вашем docker команда do

docker build --build-arg RASA_VERSION=${RASA_VERSION} -t imagename:tag .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...