Docker image to forward TCP and UDP traffic to the docker host.
This container will determine docker host address in the following order
- Use ip from environment variable
DOCKER_HOST
if set- This allows you to use this image to forward traffic to arbitrary destinations, not only the docker host.
- Try to resolve
host.docker.internal
(getent ahostsv4 host.docker.internal
) - Defaults to default gateway (
ip -4 route show default
)
-
You have to bind your host applications to
bridge
network gateway in addition to localhost(127.0.0.1).Use following docker command to get the bridge network gateway IP address
docker network inspect bridge --format='{{( index .IPAM.Config 0).Gateway}}'
-
You might need to configure your firewall of the host system to allow the docker-host container to communicate with the host on your relevant port, see #21.
These examples will send messages from docker container to docker host with netcat
Start netcat
server TCP on port 2323
to receive and display messages
nc 2323 -lk
Start netcat
server UDP on port 5353
to receive and display messages
nc 5353 -lk -u -w0
Run the dockerhost container.
docker run --rm \
--name 'docker-host' \
--cap-add=NET_ADMIN --cap-add=NET_RAW \
--restart on-failure \
-d qoomon/docker-host
Run your application container and link the dockerhost container.
The dockerhost will be reachable through the domain/link dockerhost
of the dockerhost container
docker run --rm \
--link 'docker-host' \
-it alpine nc 'docker-host' 2323 -v
docker run --rm \
--link 'docker-host' \
-it alpine nc 'docker-host' 5353 -u -v
Create the dockerhost network.
network_name="Network-$RANDOM"
docker network create "$network_name"
Run the dockerhost container within the dockerhost network.
docker run --name "${network_name}-docker-host" \
--cap-add=NET_ADMIN --cap-add=NET_RAW \
--restart on-failure \
--net=${network_name} --network-alias 'docker-host' \
qoomon/docker-host
Run your application container within the dockerhost network.
The dockerhost will be reachable through the domain/link docker-host
of the dockerhost container
docker run --rm \
--link 'docker-host' \
-it alpine nc 'docker-host' 2323 -v
docker run --rm \
--link 'docker-host' \
-it alpine nc 'docker-host' 5353 -u -v
version: '2'
services:
docker-host:
image: qoomon/docker-host
cap_add: [ 'NET_ADMIN', 'NET_RAW' ]
mem_limit: 8M
restart: on-failure
tcp_message_emitter:
depends_on: [ docker-host ]
image: alpine
command: [ "sh", "-c", "while :; do date; sleep 1; done | nc 'docker-host' 2323 -v"]
udp_message_emitter:
depends_on: [ docker-host ]
image: alpine
command: [ "sh", "-c", "while :; do date; sleep 1; done | nc 'docker-host' 5353 -u -v"]