Переменная среды не будет сохраняться на протяжении всего сеанса bash. при запуске контейнера он будет доступен только в этом сеансе точки входа, но позже он будет недоступен, если он установлен с использованием export
.
docker ENV и экспорт RUN
Если вы хотите использовать их во всех сеансах, вы должны установить их в Dockerfile.
ENV SCHEME=http
ENV HOST=example.com
ENV PORT=3000
А на стороне приложения вы можете использовать их вместе, также они будут доступны для всех сеансов.
curl "${SCHEME}://${HOST}:${PORT}
#
Step 8/9 : RUN echo "${SCHEME}://${HOST}:${PORT}"
---> Running in afab41115019
http://example.com:3000
Теперь, если мы посмотрим на то, как вы используете, это не сработает, потому что
export URL="$SCHEME://$HOST:$PORT"
# only in this session
echo "URL:$URL"
# will be available for node process too but for this session only
node app.js
Например, загляните в этот Dockerfile
FROM node:alpine
RUN echo $'#!/bin/sh \n\
export URL=example.com \n\
echo "${URL}" \n\
node -e \'console.log("ENV URL value inside nodejs", process.env.URL)\' \n\
exec "$@" \n\
' >> /bin/entrypoint.sh
RUN chmod +x /bin/entrypoint.sh
entrypoint ["entrypoint.sh"]
Таким образом, при первом запуске контейнера Docker вы сможете увидеть ожидаемый ответ.
docker run -it --rm myapp
example.com
ENV URL value inside nodejs example.com
Теперь мы хотим проверить более позднюю сессию.
docker run -it --rm abc tail -f /dev/null
example.com
ENV URL value inside nodejs example.com
так что контейнер в это время работает, мы можем проверить для другого сеанса
docker exec -it myapp sh -c "node -e 'console.log(\"ENV URL value inside nodejs\", process.env.URL)'"
ENV URL value inside nodejs undefined
Поскольку у нас может быть один и тот же сценарий, но другое поведение из-за докера, поэтому переменная доступна только в этом сеансе, вы можете записать их в файл, если вы заинтересованы в дальнейшем использовании.
person
Adiii
schedule
02.07.2020