【发布时间】:2015-11-28 19:44:05
【问题描述】:
我想为一个将配置文件的 URL 作为参数并使用该文件的开源应用程序提供一个简单易用的 Docker 容器。
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 完成 curl 下载,但我不确定它是如何工作的?
【问题讨论】:
标签: javascript node.js asynchronous docker config