docker compose run echo Пустая переменная окружения из Dockerfile ENV - на выводится значение
Primary tabs
Проблема
Как получить через docker compse run распечатку значаения переменной окружения установленной при сборки образа контейнера через env, например:
FROM node:18.17-alpine WORKDIR /install COPY package.json ./ COPY package-lock.json ./ RUN npm ci ENV NODE_PATH=/install/node_modules WORKDIR /var/www COPY ../ . CMD npm start
NODE_PATH - установили при сборке и теперь хотим получить значение при запуске контейнера
Команда вида (фрагмент из мейкфайла с распечаткой переменных окружения контейнера):
docker compose $(PROJECT_SETTINGS) run -ti frontend echo $$USER && echo $$NODE_PATH && echo 123
(гда frontend имя контейнера из docker-compose.yml) возвращает:
my_user
123
-- то есть для установленной в dockerfile переменной получаем пустую строку, при этом если мы зайдем в шелл контейнера:
docker compose $(PROJECT_SETTINGS) run -i frontend
- то там переменная обнаруживается нормально.
Решение
Гипотеза:
Пока решение не найдено, возможно в первом примере run команды иницилизируются не все переменные, в отличие от второго случая с запуском sh
Обновлено:
причина судя по всему в том, что переменные среды в данном случае просто "приезжают" из окружения хостовой системы, ее терминала, в этом можно убедиться, применив pwd в списке команд:
docker compose $(PROJECT_SETTINGS) run -it frontend \ sh -c "pwd && echo $$USER && echo $$NODE_PATH && echo 123"
-- pwd выведет путь внутри контейнера (гостевая система), но переменные будут из хостовой
- Log in to post comments
- 520 reads
vedro-compota
Sat, 09/09/2023 - 10:26
Permalink
Владислав пишет:
Владислав пишет:
_____________
матфак вгу и остальная классика =)