Node.jsで必要なファイルやディレクトリなどは割愛
早速、エラーが出たときの設定は以下の通り
Dockerfile
app
ディレクトリを作成、その中にDockerfile
を保存します。
Dockerfile
# nodeの最新バージョンを指定FROM node:10#docker内でのディレクトリを作成RUN mkdir /code
WORKDIR /code# node.js公式サイトのdocker化ドキュメント通り# copy先にcodeディレクトリを指定COPY package*.json /code/RUN npm installRUN npm install express --saveRUN useradd -md /bin/bash localADD . /code/CMD [ "npm", "start" ]
docker-compose.yml
docker-compose.yml
version:'3'services:prog-app:build:context:./app/image:sample-app-nodecommand:bash -c "npm run start"volumes:-./app/:/codecontainer_name:sampappports:-"8001:5000"environment:TZ:'Asia/Tokyo'
package.json
package.json
{"name":"sample-app","version":"1.0.0","description":"sample app description","main":"app.js","scripts":{"test":"echo \"Error: no test specified\"&& exit 1","start":"node app.js"},"repository":{"type":"git","url":""},"license":"MIT","dependencies":{"express":"^4.17.1","ejs":"^3.0.1"},"engines":{"node":"10.x"}}
app.js
app.js
constexpress=require('express');constindex=require('./routes/index');constport=process.env.PORT||5000;constapp=express();app.use('/static',express.static('public'));app.set('view engine','ejs');app.use('/',index);app.listen(port,()=>console.log(`app listening on port ${port}!`));module.exports=app;
error
internal/modules/cjs/loader.js:638
throw err; ^
Error: Cannot find module 'express'
expressがなぜか使えない。
以下のサイトに解決策がありました。
https://castaneai.hatenablog.com/entry/2019/01/29/151257
docker-compose.yml
version:'3'services:prog-app:build:context:./app/image:sample-app-nodecommand:bash -c "npm run start"volumes:-./app/:/code-/code/node_modules# 追加container_name:sampappports:-"8001:5000"environment:TZ:'Asia/Tokyo'
dockerコンテナ・イメージ削除しdocker-compose up
を再度実行すれば、以下のように成功しました。
>sample-app@1.0.0 start /code
>node app.js
app listening on port 5000!