I have a hello world express.js application inside a docker container. It is configured to run on port 8080, and the docker file opens that port in the image. In addition, I publish the port when I launch the image. However, when I try to make a simple curl request, the connection is rejected. Here is how I set up this test:
My Dockerfile is pretty simple:
FROM node ADD ./src /src WORKDIR /src
And inside my ./src directory, I have a server.js file that looks like this:
var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('Hello World'); }); var server = app.listen(8080, function() { console.log('Listening on port %d', server.address().port); });
as well as the base package.json , which looks like this:
{ "name": "hello-world", "description": "hello world test app", "version": "0.0.1", "private": true, "dependencies": { "express": "4.7.2" } }
The image is just fine:
β docker build -t jimjeffers/hello-world . Sending build context to Docker daemon 1.126 MB Sending build context to Docker daemon Step 0 : FROM node ---> 6a8a9894567d Step 1 : ADD ./src /src ---> 753466503fbf Removing intermediate container 135dab70dfff Step 2 : WORKDIR /src ---> Running in 12257ff3f990 ---> 010ce4140cdc Removing intermediate container 12257ff3f990 Step 3 : RUN npm install ---> Running in 1a9a0eb9d188 ---> 5dc97c79281e Removing intermediate container 1a9a0eb9d188 Step 4 : EXPOSE 8080 ---> Running in abbaadf8709d ---> 9ed540098ed2 Removing intermediate container abbaadf8709d Step 5 : CMD [ "node", "server.js" ] ---> Running in 63b14b5581cd ---> eababd51b50e Removing intermediate container 63b14b5581cd Successfully built eababd51b50e
And it starts just fine:
β docker run -P -d jimjeffers/hello-world ee5024d16a679c10131d23c1c336c163e9a6f4c4ebed94ad4d2a5a66a64bde1d β docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ee5024d16a67 jimjeffers/hello-world:latest node server.js About an hour ago Up 11 seconds 0.0.0.0:49158->8080/tcp jovial_engelbart 5d43b2dee28d mongo:2.6 /usr/src/mongo/docke 5 hours ago Up 3 hours 27017/tcp some-mongo
I can confirm that the server is running inside the container:
β docker logs ee5024d16a67 Listening on port 8080
But if I try to fulfill the request, the connection will be rejected.
β curl -i 0.0.0.0:49158 curl: (7) Failed connect to 0.0.0.0:49158; Connection refused
Is there something I am missing here? If I run the application without using docker, it works as expected:
β node src/server.js Listening on port 8080 β curl -i 0.0.0.0:8080 HTTP/1.1 200 OK X-Powered-By: Express Content-Type: text/html; charset=utf-8 Content-Length: 11 ETag: W/"b-1243066710" Date: Mon, 04 Aug 2014 05:11:58 GMT Connection: keep-alive Hello World