2017-05-01 82 views
1

我嘗試在Docker容器中重新加載我的節點js應用程序代碼。我使用pm2作爲進程管理器。這裏是我的配置: Dockerfile在docker容器中重新加載代碼。 PM2。節點js

FROM node:6.9.5 

LABEL maintainer "[email protected]" 

RUN mkdir -p /usr/src/koa2-app 

COPY . /usr/src/koa2-app 

WORKDIR /usr/src/koa2-app 

RUN npm i -g pm2 

RUN npm install 

EXPOSE 9000 

CMD [ "npm", "run", "production"] 

ecosystem.prod.config.json(又名PM2配置)

{ 
    "apps" : [ 
    { 
     "name"  : "koa2-fp", 
     "script"  : "./bin/www.js", 
     "watch"  : true, 
     "merge_logs" : true, 
     "log_date_format": "YYYY-MM-DD HH:mm Z", 
     "env": { 
     "NODE_ENV": "production", 
     "PROTOCOL": "http", 
     "APP_PORT": 3000 
     }, 
     "instances": 4, 
     "exec_mode" : "cluster_mode", 
     "autorestart": true 
    } 
    ] 
} 

泊塢窗,compose.yaml

version: "3" 
services: 
    web: 
    build: . 
    volumes: 
     - ./:/koa2-app 
    ports: 
     - "3000:3000" 

npm run生產 - PM2開始--attach ecosystem.prod.config.json

我跑在CLI「泊塢窗,撰寫了」和它的作品,我能夠用我的本地主機上的應用程序交互:3000。但是,如果對代碼進行一些更改,它將不會顯示在網頁中。如何在碼頭中配置代碼重新加載?

P.S.最佳實踐問題:開發使用docker的東西真的可以嗎?或碼頭集裝箱最適合生產使用。

+0

您是否驗證過您的容器中的文件已更新?這裏有兩個可能的問題。 Docker沒有正確更新文件,或者您的服務器沒有檢測到更改。您可以使用'docker-compose exec web sh'來獲得一個shell並驗證文件是否被正確修改。 – kichik

+0

檢查。碼頭容器內的文件不會更新。 –

回答

1

看來你是COPY你的代碼在一個地方,音量是在另一個地方。

嘗試:

version: "3" 
services: 
    web: 
    build: . 
    volumes: 
     - ./:/usr/src/koa2-app 
    ports: 
     - "3000:3000" 

然後,當你改變外容器(您的IDE)的js代碼,現在PM2能夠看到的變化,因此,重新加載應用程序(你需要確保的那部分)。

關於在開發環境中使用Docker:由於許多原因,這是一件非常好的事情。例如,您可以針對不同環境管理相同的應用程序安裝,從而減少大量錯誤等。

+1

它爲我工作。也感謝您的最佳做法問題答案! –