My dockerfile will run npm install, however after docker-compose build
the folder node_modules in my host folder remains empty even after seeing building. How can i get the folder up and reflected in the host too?
This is docker-compose.yml:
This is my docker-compose
version: "2"
volumes:
mongostorage:
services:
app:
build: ./app
ports:
- "3000"
links:
- mongo
- redis
command: node ./bin/www
nginx:
build: ./nginx
ports:
- "80:80"
links:
- app:app
mongo:
image: mongo:latest
environment:
- MONGO_DATA_DIR=/data/db
volumes:
- mongostorage:/data/db
ports:
- "27017:27017"
redis:
image: redis
volumes:
- ./data/redis/db:/data/db
ports:
- "6379:6379"
This is dockerfile in app
FROM node:6.3
RUN mkdir -p /var/www/app
WORKDIR /var/www/app
VOLUME /var/www/app
COPY . /var/www/app
COPY package.json /var/www/app
RUN npm install
package.json
{
"name": "app",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"body-parser": "^1.13.3",
"cookie-parser": "~1.3.5",
"debug": "~2.2.0",
"express": "~4.13.1",
"helmet": "^3.0.0",
"jade": "~1.11.0",
"redis": "^2.6.2",
"serve-favicon": "~2.3.0"
},
"devDependencies": {
"gulp": "^3.9.1",
"gulp-autoprefixer": "^3.1.1",
"gulp-complexity": "^0.3.2",
"gulp-concat": "^2.6.1",
"gulp-cssnano": "^2.1.2",
"gulp-less": "^3.3.0",
"gulp-uglify": "^1.5.4",
"gulp-watch": "^4.3.11",
"strip-debug": "^1.1.1",
"util": "^0.10.3"
}
}
docker logs
for the app container returns after docker-compose up
error:
module.js:442
throw err;
^
Error: Cannot find module 'dotenv'
at Function.Module._resolveFilename (module.js:440:15)
at Function.Module._load (module.js:388:25)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/var/www/nodeapp/app.js:3:1)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
That VOLUME instruction is mounting your app directory to the host which would be hiding anything you put in there on the container. I'm actually surprised that you see the node_modules directory. You don't need the COPY package.json
instruction either as the COPY .
should take care of that. Try the following Dockerfile instead..
FROM node:6.3
RUN mkdir -p /var/www/app
WORKDIR /var/www/app
COPY . /var/www/app
RUN npm install
This works fine for me using the info you have provided.
Running docker-compose build
from the directory which contains the Dockerfile builds the image successfully.
$ tree
.
├── app
│ ├── Dockerfile
│ └── package.json
└── docker-compose.yml
1 directory, 3 files
$ cat docker-compose.yml
version: "2"
services:
app:
build: ./app
ports:
- "3000"
command: node ./bin/www
$ cat app/Dockerfile
FROM node:6.3
RUN mkdir -p /var/www/app
WORKDIR /var/www/app
COPY . /var/www/app
RUN npm install
$ cat app/package.json
{
"name": "app",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"body-parser": "^1.13.3",
"cookie-parser": "~1.3.5",
"debug": "~2.2.0",
"express": "~4.13.1",
"helmet": "^3.0.0",
"jade": "~1.11.0",
"redis": "^2.6.2",
"serve-favicon": "~2.3.0"
},
"devDependencies": {
"gulp": "^3.9.1",
"gulp-autoprefixer": "^3.1.1",
"gulp-complexity": "^0.3.2",
"gulp-concat": "^2.6.1",
"gulp-cssnano": "^2.1.2",
"gulp-less": "^3.3.0",
"gulp-uglify": "^1.5.4",
"gulp-watch": "^4.3.11",
"strip-debug": "^1.1.1",
"util": "^0.10.3"
}
}
run the build..
$ docker-compose build
Building app
Step 1/5 : FROM node:6.3
6.3: Pulling from library/node
357ea8c3d80b: Pull complete
...
646e6da4bf07: Pull complete
Digest: sha256:cde2bd38dbfec5e6e2981ec7a05056c734148fcd4bff088e143f11b2bafe3b64
Status: Downloaded newer image for node:6.3
---> 0d9089853221
Step 2/5 : RUN mkdir -p /var/www/app
---> Running in 018dd9b28c57
---> 18cc43628367
Removing intermediate container 018dd9b28c57
Step 3/5 : WORKDIR /var/www/app
---> b8fa2b1a2624
Removing intermediate container ba1ad506cab2
Step 4/5 : COPY . /var/www/app
---> 3f37c76acdc4
Step 5/5 : RUN npm install
---> Running in dd87c26c2546
npm info it worked if it ends with ok
npm info using [email protected]
npm info using [email protected]
npm info attempt registry request try #1 at 11:39:41 AM
npm http request GET https://registry.npmjs.org/body-parser
...
npm info lifecycle [email protected]~postinstall: [email protected]
npm info lifecycle [email protected]~preinstall: [email protected]
npm info linkStuff [email protected]
npm info lifecycle [email protected]~install: [email protected]
npm info lifecycle [email protected]~postinstall: [email protected]
npm info lifecycle [email protected]~prepublish: [email protected]
[email protected] /var/www/app
+-- [email protected]
| +-- [email protected]
...
npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: [email protected]
npm info ok
---> d1bfc665f54c
Removing intermediate container dd87c26c2546
Successfully built d1bfc665f54c
Successfully tagged so47173020_app:latest
modifying the Dockerfile command as done below I am able to run docker-compose up app
and see all the modules installed in the node_modules directory.
version: "2"
services:
app:
build: ./app
ports:
- "3000"
command: ls -la node_modules
output of docker-compose up app
:
Creating so47173020_app_1 ...
Creating so47173020_app_1 ... done
Attaching to so47173020_app_1
app_1 | total 2004
app_1 | drwxr-xr-x 497 root root 20480 Nov 10 11:40 .
app_1 | drwxr-xr-x 1 root root 4096 Nov 10 11:40 ..
app_1 | drwxr-xr-x 2 root root 4096 Nov 10 11:40 .bin
app_1 | drwxr-xr-x 2 root root 4096 Nov 10 11:40 accepts
app_1 | drwxr-xr-x 4 root root 4096 Nov 10 11:40 accord
...
app_1 | drwxr-xr-x 3 root root 4096 Nov 10 11:40 x-xss-protection
app_1 | drwxr-xr-x 2 root root 4096 Nov 10 11:40 xtend
app_1 | drwxr-xr-x 3 root root 4096 Nov 10 11:40 yargs
so47173020_app_1 exited with code 0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With