DOCKER НАЗНАЧАЕТ значение оболочки для ENV в файле DOCKERFILE

#docker #shell #docker-compose #dockerfile

Вопрос:

Я решительно ищу решение для передачи значения ENV переменной DOCKERFILE .

 EX:

FROM alphine

COPY domainname.txt .

ENV NAME=$(cat /domainname.txt)
 

Комментарии:

1. Файл Dockerfile-это рецепт создания образа. Это не программа, которая запускается при запуске образа. Инструкции ENV в файле dockerfile устанавливают значение файла dockerfile по умолчанию. Вы можете переопределить значение при запуске изображения, указав -e параметр в docker run команде.

2. спасибо за быстрый ответ .. я хочу, чтобы мое изображение было завернуто со всеми необходимыми условиями для запуска db_container. где я не хочу передавать env через docker-сочинять или запускать docker..

3. Вы хотите, чтобы они были встроены в изображение во время сборки или вы хотите передать их из файлов (например domainname.txt) во время выполнения?

4. это правда..

5. Тогда то, что вы уже сделали, прекрасно. Можете ли вы объяснить, что, по вашему мнению, в этом не так?

Ответ №1:

Если вы настаиваете на том, чтобы получить NAME значение при сборке docker, вы можете использовать следующий:

Докерфайл:

 FROM alpine

ARG NAME
ENV NAME=${NAME}
 

domainname.txt:

 hello
 

Исполнение:

 $ docker build --build-arg NAME=$(cat ./domainname.txt) -t abc:1 . --no-cache
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM alpine
 ---> d4ff818577bc
Step 2/3 : ARG NAME
 ---> Running in f1c58e816499
Removing intermediate container f1c58e816499
 ---> dc4d5894440b
Step 3/3 : ENV NAME=${NAME}
 ---> Running in 9b8f98a3857c
Removing intermediate container 9b8f98a3857c
 ---> 2b0c68ddc994
Successfully built 2b0c68ddc994
Successfully tagged abc:1
$ docker run --rm -it abc:1 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=2155d7368c3e
TERM=xterm
NAME=hello
HOME=/root
 

Вы могли видеть, что выше NAME было назначено как hello .

Простое объяснение:

  1. NAME=$(cat ./domainname.txt) назначить hello на NAME
  2. --build-arg передайте hello сборку в докер ARG NAME
  3. ENV NAME=${NAME} получить hello от ARG NAME

Комментарии:

1. Извините, поскольку я четко упоминаю, что хочу, чтобы это было предварительно построено со всеми необходимыми env