DEV Community

Serhat Teker
Serhat Teker

Posted on • Originally published at tech.serhatteker.com on

2

Connect Redis from Another Container

1. Issue

I started a redis container in my local environment and now I want to connect and/or send data to it from another container.

1.1. Reproduce

1.1.1. docker cli

Let's assume that I started a redis container from cli:

$ docker run \
    --name redislocal \
    -p "6379:6379" \
    redis:6.2.5
Enter fullscreen mode Exit fullscreen mode

Or in a more appropriate way:

$ docker run \
    --name redislocal \
    --hostname redislocal \
    -p "127.0.0.1:6379:6379" \
    -d \
    redis:6.2.5 \
    redis-server \
    --appendonly yes \
    --requirepass pa$$w0rD
Enter fullscreen mode Exit fullscreen mode

1.1.2. docker-compose

Maybe I started it via docker-compose:

$ docker-compose -f compose-redis-local.yml up -d --build
Enter fullscreen mode Exit fullscreen mode

And compose-redis-local.yml something like:

# compose-redis-local.yml
version: "3.5"

volumes:
  local_redis_data: {}

services:
  redis:
    container_name: redislocal
    hostname: redislocal
    image: redis:6.2.5
    command: redis-server --appendonly yes --requirepass pa$$w0rD
    ports:
      - "127.0.0.1:6379:6379"
    volumes:
        - local_redis_data:/data
    restart:
      unless-stopped
Enter fullscreen mode Exit fullscreen mode

2. Solution

Sorry: there is NO way you can connect to above redis containers from another container.

When you spawn containers from docker-composedocker-compose example, docker will:

  1. Create a network mayapp_default with bridge driver (myapp is the directory you're in)
  2. Create redislocal container and add it to mayapp_default network under the name redis

Similar applies to docker cli.

2.1. Custom Network

What you need is a user defined custom shared network: You should create a custom network than respawn your containers in this network.

Create a network called local-dev:

$ docker network create local-dev
Enter fullscreen mode Exit fullscreen mode

Ensure it was created:

$ docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
6d05d9ee7371   bridge            bridge    local
ac5000845253   host              host      local
d75701b57e1e   kind              bridge    local
5bde7f533689   local-dev         bridge    local
Enter fullscreen mode Exit fullscreen mode

2.1.1. docker cli

Start within this network:

$ docker run \
    --name redislocal \
    --network local-dev
    -p "127.0.0.1:6379:6379" \
    -d \
    redis:6.2.5 \
    redis-server \
    --appendonly yes \
    --requirepass pa$$w0rD
Enter fullscreen mode Exit fullscreen mode

2.1.2. docker-compose

Use this network as an external network in your compose file:

# compose-redis-local.yml
version: "3.5"

volumes:
  local_redis_data: {}

services:
  redis:
    container_name: redislocal
    hostname: redislocal
    image: redis:6.2.5
    command: redis-server --appendonly yes --requirepass 6te0valZ2L
    ports:
      - "127.0.0.1:6379:6379"
    volumes:
        - local_redis_data:/data
    networks:
      - local-dev

networks:
  local-dev:
    external: true
Enter fullscreen mode Exit fullscreen mode

In addition to those, instead of User-defined bridge networks you can use host networks however I don't like this approach since it breaks the isolation nature of docker.

For more info you can look at this official docker docs:

3. Connect

Now you can connect in the same network:

$ docker run \
    -it \
    --rm \
    --net local-dev \
    redis:6.2.5 \
    redis-cli -h redislocal -a pa$$w0rD ping
PONG
Enter fullscreen mode Exit fullscreen mode

All done!

Top comments (0)

👋 Kindness is contagious

Engage with a wealth of insights in this thoughtful article, valued within the supportive DEV Community. Coders of every background are welcome to join in and add to our collective wisdom.

A sincere "thank you" often brightens someone’s day. Share your gratitude in the comments below!

On DEV, the act of sharing knowledge eases our journey and fortifies our community ties. Found value in this? A quick thank you to the author can make a significant impact.

Okay