Как установить переменную окружения в Docker контейнере всей системы при запуске контейнера для всех пользователей? - PullRequest
0 голосов
/ 06 июня 2019

Мне нужно установить некоторую переменную среды для всех пользователей и процессов внутри контейнера Docker.Он должен быть установлен при запуске контейнера, а не в Dockerfile, потому что это зависит от работающей среды.

Так что простой Dockerfile

FROM ubuntu
RUN echo 'export TEST=test' >> '/root/.bashrc'

хорошо работает для интерактивных сеансов docker run -ti test bashтогда env и есть TEST=test

но когда docker run -ti test env нет TEST

я пытался

RUN echo 'export TEST=test' >> '/etc/environment'
RUN echo 'TEST="test"' >> '/etc/environment'
RUN echo 'export TEST=test' >> /etc/profile.d/1.sh
ENTRYPOINT export TEST=test

Ничего не помогает.

Зачем мне это нужно.У меня есть переменная http_proxy внутри контейнера, автоматически устанавливаемая Docker, мне нужно установить другие переменные, основываясь на ней, то есть JAVA_OPT, сделать это для всей системы, для всех пользователей и процессов, а также в работающей среде, а не во время сборки.

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Я бы создал скрипт, который был бы точкой входа:

#!/bin/bash

# if env variable is not set, set it
if [ -z $VAR ];
then
    # env variable is not set
    export VAR=$(a command that gives the var value);
fi

# pass the arguments received by the entrypoint.sh
# to /bin/bash with command (-c) option
/bin/bash -c $@ 

И в Dockerfile я бы установил точку входа:

ENTRYPOINT entrypoint.sh

Теперь каждый раз, когда я запускаю docker run -it <image> <any command> itиспользует мой сценарий в качестве точки входа, поэтому всегда запускает его перед тем, как команда затем передает аргументы в нужное место, которое /bin/bash.

Улучшения

Приведенного выше сценария достаточно для работы, если вывсегда используйте точку входа с аргументами, иначе ваша переменная $@ будет пустой и выдаст ошибку /bin/bash: -c: option requires an argument.Простое решение - оператор if:

if [ ! -z $@ ];
then
    /bin/bash -c $@;
fi
0 голосов
/ 06 июня 2019

Установка параметра в ENTRYPOINT решит эту проблему.

В файле Docker передать параметр в ENTRYPOINT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...