Let’s explore some fundamentals of communicating with docker containers.
Here’s a video version of this post:
Example services that we can talk with
ryanlabouve/hello-node gives us a PONG style server that we can curl and get a simple response. Let’s get that running.
docker run -d -p 3000:3000 ryanlabouve/hello-node:v1
Talking from the outside
Let’s confirm where our container is running (even though we have a good guess from the -p 3000:3000
.) Running docker ps
will show us which port is running inside and outside of the container.
docker ps
Now in another tab you can curl
port 3000
curl localhost:3000 # => Hello world!
Now let’s stop that container.
Checking from the inside
Let’s exclude the publish option (-p
) to simulate us not knowing which port the container was exposing.
docker run -d ryanlabouve/hello-node:v1
Shell into running container
Now we can shell into the container to inspect. We can execute /bin/bash
on our running container to shell in.
First we can use docker ps
to verify the container is running and we don’t see any port information.
Now let’s shell in via docker exec
.
# Put in YOUR container id or container name # use `docker ps` if you need to look either of these up docker exec -it 6f7076646b58 /bin/bash
Use netstat to check what’s running
We’ll need netstat
to inspect the running. This tool is included in net-tools
.
apt-get update apt-get upgrade apt-get install net-tools
Here are the docs for netstat.
netstat -plant
On the last line we can see port 3000
is listening. And if we curl localhost:3000
WHILE shelled into the box we can see a response. So if we were unaware if which port to expose, this would have helped us decide.
In the next post, we’ll put all of this together and work with multiple containers and Docker compose.