2016-12-19 27 views
3

我試圖推出使用PM2泊塢窗容器內2周應用程序的NodeJS,所以我做了一個自定義Dockerfile所有的項目配置推出兩款泊塢的NodeJS容器內的應用程序中使用PM2

FROM node:argon 

RUN npm install pm2 -g --silent 

VOLUME ./src/app:/usr/src/app 
WORKDIR /usr/src/app 

RUN git clone https://github.com/yoonic/atlas.git backend 
RUN cd backend && \ 
    npm i --silent && \ 
    pm2 start npm --name "backend" -- run dev --no-daemon 

RUN git clone https://github.com/yoonic/nicistore.git frontend 
RUN cd frontend && \ 
    npm i --silent && \ 
    sed -i "s#api.atlas.baseUrl#http://localhost:8000/v1#" config/client/development.js && \ 
    pm2 start npm --name "frontend" -- run dev --no-daemon 

我開始這個容器與docker-compose up與此配置

# NodeJS 
nodejs: 
    build: docker/nodejs 
    container_name: nodejs 
    ports: 
    - 53000:3000 
    - 54000:4000 

當所有的容器設置完畢後,我得到了我的終端的PM2進程列表 然後泊塢窗,開始撰寫我的所有容器,但我的一個的NodeJS瞬間失敗

退出的NodeJS代碼爲0

我的應用程序的NodeJS我的容器內正在努力,但這個出口瞬間......

的正確方法,使這項工作? PM2可能不需要?

我該如何做到這一點?

編輯

的容器出口的時候我不使用--no-daemon,因爲它覺得一切都做。 但是,當我使用--no-daemon構建過程永遠不會結束,因爲它讓我的應用程序的NodeJS日誌

回答

1

首先,雖然you can run several processes in one container平時去最好的辦法是隻使用一個每個集裝箱的過程。所以你可以在你的docker-compose.yml有兩個服務 - 一個用於後端,另一個用於前端。

,我們在您Dockerfile一些問題,需要修復:

  1. 使用ADDCOPY代替VOLUME將文件複製到容器
  2. 使用RUN命令只是安裝NPM包等,以準備圖像。
  3. 使用COMMANDENTRYPOINT定義容器啓動時運行的命令。

那麼,爲什麼你的容器退出的原因是你沒有指定自己COMMAND,因此從node:argon默認運行命令。由於缺省命令是啓動節點REPL,並且如果容器未以交互模式運行,它將退出,您的容器在啓動時立即退出。

我現在有點忙,不能準備一個完整的工作代碼示例。你能用這些提示找到你的前進道路嗎? :)

+0

好吧,我會糾正我的錯誤,我送你一個評論,如果我還可以」讓這個容器工作 –