sql >> Databasteknik >  >> NoSQL >> Redis

Kommunikation mellan två Docker-behållare på macOS 10.12

Varje behållare har sin egen lokala värd

Varje tjänst körs i sin egen container. Ur Ubuntu-behållarens perspektiv lyssnar inte redis på localhost.

Använd Docker-nätverk

För att få dina containrar att kommunicera bör de vara på samma Docker-nätverk. Detta består av tre steg:

  1. Skapa ett Docker-nätverk
  2. Ge dina behållare namn
  3. Koppla dina behållare till nätverket du skapade

När detta är gjort kan behållarna prata med varandra med sina namn som om de vore värdnamn.

Det finns mer än ett sätt att flå den här katten... Jag kommer att titta på två i det här svaret, men det finns förmodligen några andra sätt att göra det på som jag inte är bekant med (som att använda Kubernetes eller Swarm, till exempel).

Gör det för hand

Du kan skapa ett nätverk för den här applikationen med docker network kommandon.

# Show the current list of networks
docker network ls

# Create a network for your app
docker network create my_redis_app

När du kör redis-behållaren, se till att den har ett namn och är på det här nätverket. Du kan exponera portarna externt (för macOS) om du vill (med -p ), men det är inte nödvändigt bara för andra behållare att prata med redis.

docker run -d -p 6379:6379 --name redis_server --network my_redis_app <IMAGE ID>

Kör nu din Ubuntu-behållare. Du kan också namnge den om du vill, men jag tänker inte bry mig i det här exemplet eftersom den här inte kör några tjänster.

docker run -it --network my_redis_app ubuntu bash

Nu från insidan av Ubuntu-behållaren bör du kunna nå redis med namnet redis_server , som om det vore ett DNS-namn.

Gör det med Compose

Jag tenderar att bygga sådana här inställningar med Compose, eftersom det är lättare att skriva in det i en YAML-fil (IMO). Här är ett exempel på ovanstående, omskrivet i docker-compose.yml-form:

version: '2'
services:
  redis:
    image: <IMAGE ID>
    networks:
      - my_redis_app
    ports: 6379:6379
  ubuntu:
    image: ubuntu:latest
    networks:
      - my_redis_app
networks:
  my_redis_app:
    driver: bridge

Med detta på plats kan du köra docker-compose up -d redis och ha din redis-tjänst online med ett specifikt Docker-nätverk. Compose skapar nätverket åt dig, om det inte redan finns.

Det är mindre vettigt att köra Ubuntu-behållaren på det sättet... den är interaktiv, förstås. Men jag antar att när du väl har startat om kommer du att lägga till någon form av applikationsbehållare, och kanske en webbproxy som nginx... lägg bara de andra under services också, och du kan hantera dem alla tillsammans.

Sedan ubuntu är interaktiv kan du köra den interaktivt:

# without -d, container is run interactively
docker-compose run ubuntu bash

Och nu i Ubuntu bör du kunna ansluta till redis med dess namn, som i det här exemplet helt enkelt är redis .




  1. MongoDB Index Builds – Förhindrar användare från att utlösa nya byggnader

  2. Öka automatiskt i MongoDB för att lagra sekvens av unikt användar-ID

  3. Vad är nytt i MongoDB 4.4

  4. Det går inte att skapa/öppna låsfil:/data/mongod.lock errnr:13 Tillstånd nekad