2017-09-01 28 views
0

我正在使用Elastic beanstalk啓動一個應用程序,使用nodejs容器和mongodb容器。我已經爲節點網絡應用程序創建了自己的圖像,並且我可以使用此圖像在本地創建容器,並在EC2實例上創建容器,而不存在任何問題。當使用Beanstalk啓動應用程序時,CMD「npm run prod」無法找到我的package.json文件。這裏是我的設置和問題談幾點注意事項:Elastic Beanstalk/Docker - 沒有這樣的文件或目錄package.json

  • 採用彈性魔豆多包裝泊塢環境
  • 使用Dockerrun.aws.json有兩個圖片文件:蒙戈和定製託管的NodeJS上dockerhub
  • web應用程序圖像
  • 我可以拉下圖片並使用'Docker run npm run prod'運行它(它在本地和EB創建的EC2實例上)
  • 當EB嘗試啓動圖像(使用相同的命令)時,它出錯了,並且說它找不到package.json(詳情見下面的錯誤)。

我不確定我是否對Elastic Beanstalk的工作原理有誤解,或者是否有其他缺失的東西。

Dockerrun.aws.json文件(圖像名和env乏移除):

{ 
"AWSEBDockerrunVersion": 2, 
"volumes": [ 
    { 
     "name": "mongo-vol", 
     "host": { 
      "sourcePath": "/var/app/mongo-vol" 
     } 
    }, 
    { 
     "name": "web-vol", 
     "host": { 
      "sourcePath": "/var/app/web-vol" 
     } 
    } 
], 
"containerDefinitions": [ 
    { 
     "name": "mongo", 
     "image": "mongo:3.4", 
     "essential": false, 
     "memory": 128 
    }, 
    { 
     "name": "web", 
     "image": "<IMAGE NAME>", 
     "essential": true, 
     "memory": 128, 
     "portMappings": [ 
      { 
       "hostPort": 80, 
       "containerPort": 3000 
      } 
     ], 
     "links": [ 
      "mongo" 
     ], 
     "mountPoints": [ 
      { 
       "sourceVolume": "web-vol", 
       "containerPath": "/starter", 
       "readOnly": false 
      } 
     ] 
    } 
] 
} 

Dockerfile節點網絡應用程序:

"prod": "forever app.js", 
:從的package.json

FROM node:6-slim 
COPY . /starter 
COPY package.json /starter/package.json 
WORKDIR /starter 
ENV NODE_ENV production 
RUN yarn install --production 
RUN npm install forever -g 
CMD npm run prod 
EXPOSE 8888 

NPM腳本

來自碼頭集裝箱的錯誤日誌:

改變CMD打壞-c後
npm info it worked if it ends with ok 
npm info using [email protected] 
npm info using [email protected] 
npm ERR! Linux 4.9.43-17.38.amzn1.x86_64 
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "prod" 
npm ERR! node v6.11.2 
npm ERR! npm v3.10.10 
npm ERR! path /starter/package.json 
npm ERR! code ENOENT 
npm ERR! errno -2 
npm ERR! syscall open 

npm ERR! enoent ENOENT: no such file or directory, open '/starter/package.json' 
npm ERR! enoent ENOENT: no such file or directory, open '/starter/package.json' 
npm ERR! enoent This is most likely not a problem with npm itself 
npm ERR! enoent and is related to npm not being able to find a file. 
npm ERR! enoent 

npm ERR! Please include the following file with any support request: 
npm ERR!  /starter/npm-debug.log 

錯誤日誌 「PWD & & LS -alh & & NPM運行PROD」

/starter 
total 12K 
drwxr-xr-x 2 root root 4.0K Sep 1 16:01 . 
drwxr-xr-x 22 root root 4.0K Sep 1 16:01 .. 
-rw-r--r-- 1 root root 885 Sep 1 16:01 npm-debug.log 
npm info it worked if it ends with ok 
npm info using [email protected] 
npm info using [email protected] 
npm ERR! Linux 4.9.43-17.38.amzn1.x86_64 
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "prod" 
npm ERR! node v6.11.2 
npm ERR! npm v3.10.10 
npm ERR! path /starter/package.json 
npm ERR! code ENOENT 
npm ERR! errno -2 
npm ERR! syscall open 

npm ERR! enoent ENOENT: no such file or directory, open '/starter/package.json' 
npm ERR! enoent ENOENT: no such file or directory, open '/starter/package.json' 
npm ERR! enoent This is most likely not a problem with npm itself 
npm ERR! enoent and is related to npm not being able to find a file. 
npm ERR! enoent 

npm ERR! Please include the following file with any support request: 
npm ERR!  /starter/npm-debug.log 
+0

變化CMD爲'的bash -c 「PWD && LS -alh && NPM運行刺」'。在這些更改之後發佈新日誌 –

+0

我向帖子添加了錯誤日誌。它顯示該文件不存在。根本沒有文件存在。如果我SSH入EC2實例並運行Docker運行-it bash,然後在ls in/starter中存在這些文件。再次,我不確定我是否在這裏誤解了某些東西,但這對我來說很奇怪。 –

+0

如果我ssh進入EC2實例並運行sudo docker run bash -c「pwd && ls -alh && npm run prod」它可以工作,並且所有文件都存在。非常困惑 –

回答

0

在容器的定義,下掛載點, '/起動器' 的containerPath值已經寫完了已經在/ starter中的數據。通過改變價值,該應用程序能夠開始。

容器定義是造成該問題:

"mountPoints": [ 
     { 
      "sourceVolume": "web-vol", 
      "containerPath": "/starter", 
      "readOnly": false 
     } 

修改容器定義:

"mountPoints": [ 
     { 
      "sourceVolume": "web-vol", 
      "containerPath": "/web-data", 
      "readOnly": false 
     } 
相關問題