У меня есть приложение Dockerised, которое я хотел бы запускать как в прокси, так и в не-прокси-хост-среде. Я пытаюсь решить эту проблему, скопировав обычные переменные среды, такие как http_proxy, в контейнеры, если и только если они существуют в хосте.
Я могу получить 90% пути, запустив
set | grep -i _proxy=>proxies.env
на верхнем уровне script, а затем, имея в своем файле docker-compose.yml:
myserver:
build: ./myserver
env_file:
- proxies.env
Это копирует переменные прокси-сервера хоста, если они есть, в контейнер сервера, и работает в том смысле, что эти переменные доступны во время выполнения контейнера, другими словами, на этапе, выполняемом Dockerfile CMD или ENTRYPOINT.
Однако у меня есть один контейнер, который должен запускать npm в качестве шага сборки, то есть из команды RUN в файле Docker, и эти переменные, кажется, не присутствуют на этом этапе, поэтому npm не может найти прокси и зависает. В других работах, если у меня есть
RUN set
в моем файле Docker, я не вижу никаких переменных из proxies.env, но если я делаю
docker exec -it myserver /bin/bash
а затем запустите set, я вижу все, начиная с proxies.env.
Может ли кто-нибудь рекомендовать способ сделать эти переменные видимыми во время сборки контейнера без необходимости их жесткого кодирования, чтобы мои файлы docker-compose.yml и Dockerfile по-прежнему работали как для хостов с прокси-серверами и хостами без прокси-серверов?
(Работа с centos 7, сборка докеров 1.3.1 и докер 1.7.0)