MWO
MWO

Reputation: 2806

Docker port forwarding using localhost

I have a memcached service running on port 11211 in a docker container and I want to access this service from within another container using 127.0.0.1:11211. Im using docker-compose and nothing of "links", "ports" or "expose" seems to work for me. I don't wanna have to access with the ip of the memcached docker container instead I want to access it as it were a local service of the other container. Is there any solution?

Thanks!

version: '2'
services:
  memcached:
    build: ./memcached
    image: memcached_img
    expose:
      - "11211"
  web:
    build: .
    image: app:latest
    mem_limit: 512m
    ports:
      - "3000:3000"
    command: [ "script/startup.sh", "web" ]
  worker:
    build: .
    image: app:latest
    mem_limit: 512m
    command: [ "script/startup.sh", "worker" ]

Upvotes: 1

Views: 3477

Answers (4)

Taron Saribekyan
Taron Saribekyan

Reputation: 1390

Create docker network to communicate between containers

version: '2'
services:
  memcached:
    build: ./memcached
    image: memcached_img
    expose:
      - "11211"
    networks:
      - web-network
  web:
    build: .
    image: app:latest
    mem_limit: 512m
    ports:
      - "3000:3000"
    command: [ "script/startup.sh", "web" ]
    networks:
      - web-network
  worker:
    build: .
    image: app:latest
    mem_limit: 512m
    command: [ "script/startup.sh", "worker" ]
networks:
   web-network:
      driver: bridge

Now you can "access" services using their names. E.g. you can access memcached service from web service using memcached:11211 as host:port

Upvotes: 1

Maroshii
Maroshii

Reputation: 4017

localhost inside the container is a different isolated network. Not the host's localhost.

You could add depends_on: memcached to the web container. This will add the memcached host to the web container and you will be able to ping that host from there. Docker will take care of port forwarding. It will also make sure to start web only once memcached has already started. You could then telnet memcached 11211 from within web.

Upvotes: 0

BugHunter
BugHunter

Reputation: 1204

First, you need to change Memcache conf to allow to connect with other hosts

 go to /etc/memcached.conf:
 change -l 127.0.0.1 to -l 0.0.0.0 # or simply comment it out

build image.

in your docker-compose file

services:
  memcache:
    ports:
      - host_port: docker_service_port

Upvotes: 1

YogevAbr
YogevAbr

Reputation: 289

You can whether use 'expose XXXX' in Dockerfile, or use -p when running the container for the 1st time.
It will be super helpful for us to help you if you provide your Dockerfile that built your image from.

Upvotes: 0

Related Questions