Я хотел бы предоставить простой и удобный контейнер Docker для приложения с открытым исходным кодом, который принимает URL-адрес файла конфигурации в качестве аргумента и использует этот файл.Как запускать Docker и node.js с удаленными конфигурациями
Dockerfile довольно прямо вперед:
FROM phusion/baseimage
# Use baseimage-docker's init system.
CMD ["/sbin/my_init"]
RUN curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
RUN apt-get update
RUN apt-get install -y nodejs git
ADD . /src
RUN cd /src; npm install; npm update
ENV NODE_ENV production
CMD ["/usr/bin/node", "/src/gitevents.js"]
Я не нашел способ добавления файла, когда контейнер работает (с ADD или Entrypoint), так что я пытаюсь работать его в Node.js :
docker run -e "CONFIG_URL=https://gist.githubusercontent.com/PatrickHeneise/c97ba221495df0cd9a3b/raw/fda1b8cd53874735349c6310a6643e6fc589a404/gitevents_config.js" gitevents
это устанавливает CONFIG_URL
как переменную окружения, которые я могу использовать в узле. Однако мне нужно загрузить файл, который является асинхронным, какой тип не работает в текущей настройке.
if (process.env.NODE_ENV === 'production') {
var exists = fs.accessSync(path.join(__dirname, 'common', 'production.js'), fs.R_OK);
if (exists) {
config = require('./production');
} else {
// https download, but then `config` is undefined when running the app the first time.
}
}
В node.js нет синхронной загрузки, любые рекомендации, как я мог бы это решить?
Я бы хотел, чтобы Docker выполнял эту работу с ADD
или CMD
, делая завиток, но я не уверен, как это работает?
Это звучит интересно. Я попробую. – Patrick
Я написал файл 'init.sh' с командой curl, а затем запущенным узлом, но это кажется грязным. Запуск скрипта через CMD из файла Docker. – Patrick