Reputation: 6177
I encounter the error below when running docker-compose up
nginx_1 | 2018/07/03 06:54:17 [emerg] 1#1: host not found in upstream "admin:1123" in /etc/nginx/nginx.conf:19
nginx_1 | nginx: [emerg] host not found in upstream "admin:1123" in /etc/nginx/nginx.conf:19
nginx_1 exited with code 1
docker-compose.yml
version: "2"
volumes:
mongostorage:
services:
app:
build: ./app
ports:
- "3000"
links:
- mongo
- redis
volumes:
- ./app:/var/www/app
- /var/www/app/node_modules
adminmongo:
build: ./adminMongo
ports:
- "4455"
links:
- mongo
command: node app.js
admin:
build: ./admin
ports:
- "1123"
links:
- mongo
- redis
command: node admin_app.js
nginx:
build: ./nginx
ports:
- "80:80"
- "1123:1123"
- "4455:4455"
links:
- app:app
- admin:admin
mongo:
image: mongo:2.4
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"
dockerfile for app
FROM node:9.8
RUN mkdir -p /var/www/app
WORKDIR /var/www/app
COPY . /var/www/app
RUN npm install -g gulp pm2 notify-send
RUN npm install
CMD ["pm2-docker", "./bin/www"]
dockerfile for admin
FROM node:9.8
RUN mkdir -p /var/www/sibkladmin
WORKDIR /var/www/sibkladmin
COPY . /var/www/sibkladmin
RUN npm install -g gulp pm2 bcrypt
RUN npm install
dockerfile for nginx
FROM nginx:latest
EXPOSE 80
EXPOSE 1123
EXPOSE 4455
COPY nginx.conf /etc/nginx/nginx.conf
nginx.conf
events {
worker_connections 1024;
}
http{
upstream app.local{
least_conn;
server app:3000 weight=10 max_fails=3 fail_timeout=30s;
}
upstream app.local:4455{
least_conn;
server adminmongo:4455 weight=10 max_fails=3 fail_timeout=30s;
}
upstream app.local:1123{
least_conn;
server admin:1123 weight=10 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name app.local;
location / {
proxy_pass http://app.local;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
listen 1123;
server_name app.local:1123;
location / {
proxy_pass http://app.local:1123;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
listen 4455;
server_name app.local:4455;
location / {
proxy_pass http://sibklapp.local:4455;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
Updated:
Error received after docker-compose build
npm ERR! path /var/www/admin/node_modules/bcrypt/node_modules/abbrev
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall rename
npm ERR! enoent ENOENT: no such file or directory, rename '/var/www/admin/node_modules/bcrypt/node_modules/abbrev' -> '/var/www/admin/node_modules/bcrypt/node_modules/.abbrev.DELETE'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-07-05T10_03_43_640Z-debug.log
ERROR: Service 'admin' failed to build: The command '/bin/sh -c npm install' returned a non-zero code: 254
Upvotes: 4
Views: 12352
Reputation: 1168
Can you try:
Change:
COPY nginx.conf /etc/nginx/nginx.conf
to
COPY nginx.conf /etc/nginx/nginx.conf.d
Remove EXPOSE
ports no need to expose ports.
Update compose file to:
version: "2"
volumes:
mongostorage:
services:
app:
build: ./app
ports:
- "3000:3000"
links:
- mongo
- redis
volumes:
- ./app:/var/www/app
- /var/www/app/node_modules
command: node app.js
adminmongo:
build: ./adminMongo
ports:
- "4455:4455"
links:
- mongo
volumes:
- ./adminMongo:/var/www/adminMongo
- /var/www/adminMongo/node_modules
command: node app.js
admin:
build: ./admin
ports:
- "1123:1123"
links:
- mongo
- redis
volumes:
- ./admin:/var/www/admin
- /var/www/admin/node_modules
command: node admin_app.js
nginx:
build: ./nginx
links:
- app:app
- admin:admin
mongo:
image: mongo:2.4
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"
NOTE
I created a simple node hello world app to test, you will need to update the command:
to match what you have in package.json
Also Before you start your app run these commands to clean up any old containers/networks:
docker-compose kill
docker-compose down
docker network prune
docker volume prune
To start the services Run:
docker-compose build
docker-compose up --force-recreate
mongo_1 | Wed Jul 4 21:50:35.835 [initandlisten] waiting
for connections on port 27017
mongo_1 | Wed Jul 4 21:50:35.835 [websvr] admin web console
waiting for connections on port 28017
app_1 | app listening on port 3000!
admin_1 | admin app listening on port 1123!
adminmongo_1 | AdminMongo app listening on port 4455!
redis_1 | 1:M 04 Jul 21:50:26.523 * Running mode=standalone,
port=6379.
Upvotes: 2
Reputation: 146630
The issue indicates that you didn't install node_modules
inside the Dockerfile
using npm install
or you overwrote those from the host using COPY . /src
kind of statement.
Since the module you are using is a native module it needs to be compiled inside the docker image and not just copied from some place else as the same will not be compatible until unless the Host OS version and Image OS version are the same
Upvotes: 0