Docker for windows: how to access container from dev machine (by ip/dns name)
Questions like seem to be asked but I really don’t get it at all.
I have a window 10 dev machine host with docker for windows installed. Besides others networks it has DockerNAT netwrok with IP 10.0.75.1
I run some containers with docker-compose:
version: '2' services: service_a: build: . container_name: docker_a
It created some network
bla_default, container has IP 172.18.0.4, ofcource I can not connect to 172.18.0.4 from host – it doesn’t have any netwrok interface for this.
What should I do to be able to access this container from HOST machine? (by IP) and if possible by some DNS name? What should I add to my docker-compose.yml, how to configure netwroks?
For me it should be something basic, but I really don’t understand how all this stuff works and to access to container from host directly.
2 Solutions collect form web for “Docker for windows: how to access container from dev machine (by ip/dns name)”
The easiest option is port mapping: https://docs.docker.com/compose/compose-file/#/ports
ports: - "8080:80"
to the service definition in compose. If your service listens on port 80, requests to
localhost:8080 on your host will be forwarded to the container. (I’m using docker machine, so my docker host is another IP, but I think localhost is how docker for windows appears)
Treating the service as a single process listening on one (or a few) ports has worked best for me, but if you want to start reading about networking options, here are some places to dig in:
Docker’s official page on networking – a very high level introduction, with most of the detail on the default bridge behavior.
More information on network layout within a docker host
Host mode is kind of mysterious, and I’m curious if it works similarly on windows.
Allow access to internal docker networks from dev machine:
route /P add 22.214.171.124 MASK 255.0.0.0 10.0.75.2
Then use this https://github.com/aacebedo/dnsdock to enable DNS discovery.
> docker run -d -v /var/run/docker.sock:/var/run/docker.sock --name dnsdock --net bridge -p 53:53/udp aacebedo/dnsdock:latest-amd64 > add 127.0.0.1 as DNS server on dev machine > Use labels described in docs to have pretty dns names for containers
So the answer on the original question:
YES WE CAN!
Oh, this not actual.
MAKE DOCKER GREAT AGAIN!