2016-12-15 90 views
0

我想运行thumbd作为一个服务在一个节点中的Docker镜像!目前我只是在启动我的应用程序之前运行它,这对我来说毫无用处!有没有一种方法可以让我的Dockerfile在启动时作为init.d服务运行,而不会阻塞我的其他docker命令?我该如何在Docker容器中运行大拇指服务?

我Dockerfile去如下:

FROM node:6.2.0 

# Create app directory 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

# Install app dependencies 
COPY package.json /usr/src/app/ 
RUN npm install 

# Thumbd 
RUN npm install -g thumbd 
RUN mkdir -p /var/log/ 
RUN echo "" > /var/log/thumbd.log 
RUN thumbd server --aws_key=<KEY> --aws_secret=<SECRET> --sqs_queue=<QUEUE> --bucket=<BUCKET> --aws_region=us-west-1 --s3_acl=public-read 

# Bundle app source 
COPY . /usr/src/app 

EXPOSE 8080 

CMD npm run build && npm start 

回答

1

这可能是最容易在它自己的容器中运行thumbd由于它的工作原理没有直接链接到您的应用程序的方式。 Docker喜欢将每个容器的单个进程的想法也推上去。

FROM node:6.2.0 

# Thumbd 
RUN set -uex; \ 
    npm install -g thumbd; \ 
    mkdir -p /var/log/; \ 
    touch /var/log/thumbd.log 

CMD thumbd server --aws_key=<KEY> --aws_secret=<SECRET> --sqs_queue=<QUEUE> --bucket=<BUCKET> --aws_region=us-west-1 --s3_acl=public-read 

您可以使用Docker Compose编排在您的项目中运行多个容器。

如果您确实想在容器中运行多个进程,请使用像s6或可能的supervisord这样的init系统。

+0

是的,我知道,我应该设置一个多容器env。但是对于开发人员来说,我们不需要额外的成本,所以我已经去设置'supervisord'来处理多种服务,并且它工作得非常好。 – James111