How to serve gitbook on 0.0.0.0 instead of localhost? - gitbook

For dev purpose I want to run gitbook in a docker container which expose port 4000.
How to start dev server on 0.0.0.0 instead of 127.0.0.1 ?
gitbook server
Serving book on http://localhost:4000

Related

What is port 49160 in docker-run?

I am following this tutorial to set up docker for my node.js rest api and there is this line in the tutorial:
docker run -p 49160:8080 -d <your username>/node-web-app
And this description:
The -p flag redirects a public port to a private port inside the
container. Run the image you previously built:
From the description, I know that port 49160 is a public port and 8080 is a private port. Since I am exposing port 5001 in my nodejs app, so I think I am running:
docker run -p 49160:5001 -d <your username>/node-web-app
But what exactly is a public port? Why is it "49160"?
It can be anything. Tutorial just used a random port. You can change it whatever you want. Then you can access your node-web-app running inside container at port 5001 at localhost:49160 from your host machine.
In your example port 8080 leads to some server (probably web server / Node) located inside of your Docker container. The outside (the host you're working on) port is 49160. The Docker setting named -p connects the inner port 8080 to the outer port 49160. If you now open the browser in your host system and hit the url http://localhost:49160 you will essentially access port 8080 inside the container.
Port 8080 is usually used for web servers. It is not obligatory though.
Port 49160 is just some port you or the auther of the tutorial decided to take as an example.
If you have a server inside the container listening on port 5001 it will not be accessible in your setup. If you want to make it accessible, you could adapt the following command:
docker run -p 49160:8080 -p 49159:5001 -d <your username>/node-web-app

Docker - Using localhost for to access running container

This command below:
docker run -p 8000:8000 -t panels2
Which I am running should apparently allow me to run my application localhost on port 8000 locally.
In the docker terminal when running ‘docker ps’ I see:
0.0.0.0:8000->8000/tcp
Dockerfile look this:
EXPOSE 8000
ENTRYPOINT ["/usr/bin/python3.6", "/app/manage.py", "runserver"]
How to get access to localhost:8000?
The answer is set ip on 0.0.0.0 not 127.0.0.1(work inside container) because when we create a bridge then automatically ports are mapping on 0.0.0.0 ip even if we set 127.0.0.1 for application.

Polymer serve refuses external connections

I can connect to my server on port 8081 no problem: if I do nc -l 8081 on my server, and nc my.host.name 8081 on my local machine, I can send and receive everything perfectly. But if I do polymer serve on my server, doing nc my.host.name 8081 on my local exits immediately, while nc localhost 8081 works just fine and I can see my index.html served to me if I fake an HTTP request. nc my.host.name 8081 also fails on the server.
What am I doing wrong? Why is polymer serve only listening to internal requests?
So apparently polymer serve only responds to requests made to localhost by default. Apparently there's a difference between localhost:8081 and the port 8081 that the rest of the world sees.
You can do polymer serve -H [external ip], where you get that external ip from ifconfig where it says inet addr:. Alternatively, I seem to be able to do polymer serve -H `hostname` though I'm not 100% sure that's a general solution.

docker connection refused nodejs app

I launch docker container:
docker run --name node-arasaac -p 3000:3000 juanda/arasaac
And my node.js app works ok.
If I want to change host port:
docker run --name node-arasaac -p 8080:3000 juanda/arasaac
Web page is not loaded, logs from browser console:
Failed to load resource: net::ERR_CONNECTION_REFUSED
http://localhost:3000/app.318b21e9156114a4d93f.js Failed to load resource: net::ERR_CONNECTION_REFUSED
Do I need to have the same port both in host and container? It seems it knows how to resolve http://localhost:8080 so it loads my website, but internal links in the webpage go to port 3000 and it's not as good :-(
When you are running your node.js app in a docker container it will only expose the ports externally that you designate with your -p (lowercase) command. The first instance with, "-p 3000:3000", maps the host port 3000 to port 3000 being exposed from within your docker container. This provides a 1 to 1 mapping, so any client that is trying to connect to your node.js service can do so through the HOST port of 3000.
When you do "-p 8080:3000", docker maps the host port of 8080 to the node.js container port of 3000. This means any client making calls to your node.js app through the host (meaning not within the same container as your node.js app or not from a linked or networked docker container) will have to do so through the HOST port of 8080.
So if you have external services that expect to access your node.js at port 3000 they won't be able.

Docker node.js app not listening on port

I'm working on a node.js web application and use localhost:8080 to test it by sending requests from Postman. Whenever I run the application (npm start) without using Docker, the app works fine and listens on port 8080.
When I run the app using Docker, The app seems to be running correctly (it displays that it is running and listening on port 8080), however it is unreachable using Postman (I get the error: Could not get any response). Do you know what the reason for this could be?
Dockerfile:
FROM node:8
WORKDIR /opt/service
COPY package.json .
COPY package-lock.json .
RUN npm i
COPY . .
EXPOSE 8080
CMD ["npm", "start"]
I build and run the application in Docker using:
docker build -t my-app .
docker run my-app
I have tried binding the port as described below, but I also wasn't able to reach the server on port 8181.
docker run -p 8181:8080 my-app
In my application, the server listens in the following way (using Express):
app.listen(8080, () => {
console.log('listening on port 8080');
})
I have also tried using:
app.listen(8080, '0.0.0.0', () => {
console.log('listening on port 8080');
})
The docker port command returns:
8080/tcp -> 0.0.0.0:8181
Do you guys have nay idea what the reason for this could be?
UPDATE: Using the IP I obtained from the docker-machine (192.168.99.100:8181) I was able to reach the app. However, I want to be able to reach it from localhost:8181.
The way you have your port assignment setup requires you to use the docker machine's ip address, not your localhost. You can find your docker machines ip using:
docker-machine ip dev
If you want to map the container ip to your localhost ports you should specify the localhost ip before the port like this:
docker run -p 127.0.0.1:8181:8080 my-app
Similar question:

Resources