Manish Kumar
Manish Kumar

Reputation: 245

how to connect to localhost:9092 from docker container using docker-compose and not using docker bridge

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

Answers (3)

Hesy Ra
Hesy Ra

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

GreensterRox
GreensterRox

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

GreensterRox
GreensterRox

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

Related Questions