Reputation: 245
I am running Kafka server on my local machine on port 9092. I am running a service in docker container using docker-compose which needs to send message to kafka server.
I tried writing my producer in service code using 'localhost' and IP as well but both are not working.
Can anyone help me to fix the issue?
Upvotes: 24
Views: 34915
Reputation: 61
Connect from container to local machine. Make IP alias for localhost
sudo ifconfig lo:0 172.18.1.1 up
Add to docker-compose config service lines
extra_hosts:
- 'local.machine:172.18.1.1'
And after container restart it can be used to connect
'web-socket-server' => 'ws://172.18.1.1',
Upvotes: 3
Reputation: 7150
With docker-compose:
Use the network_mode option to allow connection to localhost ports
network_mode: "host"
Without docker-compose:
Use the --net flag to allow connection to localhost ports
docker run -it --net=host
You can also use --network flag
--network="host"
According to the official Docker documentation these "give the container full access to local system services such as D-bus and is therefore considered insecure."
Of course if you containerise your service that is running on localhost:9092 then you could run that in a Docker container too and link your two Docker containers together using the --link flag:
docker run -t -d myService
docker run -t -d --link myService:myService_ref myOtherService
Upvotes: 27
Reputation: 7150
You could fix the IP address of your host and pass this to docker via docker-compose using the 'extra_hosts' option:
Something like:
sudo ifconfig lo0 alias 172.16.123.1
Then in docker compose:
extra_hosts:
- "service.localhost:172.16.123.1"
Then within the container you should be able to:
ping service.localhost
Upvotes: 7