Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Komunikacja między dwoma kontenerami Docker w systemie macOS 10.12

Każdy kontener ma swój własny host lokalny

Każda usługa działa we własnym kontenerze. Z perspektywy kontenera Ubuntu redis nie nasłuchuje na hoście lokalnym.

Użyj sieci Dockera

Aby kontenery mogły się komunikować, powinny znajdować się w tej samej sieci Docker. Składa się z trzech kroków:

  1. Utwórz sieć Dockera
  2. Nadaj nazwy swoim kontenerom
  3. Dołącz swoje kontenery do utworzonej sieci

Po wykonaniu tej czynności kontenery mogą komunikować się ze sobą, używając swoich nazw, tak jakby były nazwami hostów.

Jest więcej niż jeden sposób na oskórowanie tego kota... W tej odpowiedzi przyjrzę się dwóm, ale jest prawdopodobnie kilka innych sposobów, których nie znam (na przykład użycie Kubernetes lub Swarm).

Robię to ręcznie

Możesz utworzyć sieć dla tej aplikacji za pomocą docker network poleceń.

# Show the current list of networks
docker network ls

# Create a network for your app
docker network create my_redis_app

Po uruchomieniu kontenera redis upewnij się, że ma on nazwę i znajduje się w tej sieci. Możesz ujawnić porty zewnętrznie (dla macOS), jeśli chcesz (używając -p ), ale nie jest to konieczne tylko dla innych kontenerów, aby komunikować się z redis.

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

Teraz uruchom kontener Ubuntu. Możesz go również nazwać, jeśli chcesz, ale nie będę się tym przejmował, ponieważ ten nie obsługuje żadnych usług.

docker run -it --network my_redis_app ubuntu bash

Teraz z wnętrza kontenera Ubuntu powinieneś być w stanie uzyskać dostęp do redis, używając nazwy redis_server , jakby to była nazwa DNS.

Wykonywanie tego za pomocą tworzenia

Zwykle buduję takie konfiguracje za pomocą Compose, ponieważ łatwiej jest zapisać je w pliku YAML (IMO). Oto przykład powyższego, przepisany w formie docker-compose.yml:

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

Mając to na miejscu, możesz uruchomić docker-compose up -d redis i mieć usługę redis w trybie online za pomocą określonej sieci Docker. Compose utworzy dla Ciebie sieć, jeśli jeszcze nie istnieje.

Nie ma sensu uruchamiać kontenera Ubuntu w ten sposób... jest to oczywiście interaktywne. Ale zakładam, że po ponownym uruchomieniu dodasz jakiś kontener aplikacji i być może serwer proxy, taki jak nginx... po prostu umieść pozostałe w services jak również i możesz nimi wszystkimi zarządzać razem.

Od ubuntu jest interaktywny, możesz go uruchomić interaktywnie:

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

A teraz w Ubuntu powinieneś być w stanie połączyć się z redis przy użyciu jego nazwy, która w tym przykładzie to po prostu redis .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wyszukiwanie w wartościach redis db

  2. parametr maxmemory w redis.conf

  3. Wiedząc, kiedy resque pracownik zakończył pracę

  4. Funkcja klawiszy Redis do dopasowania z wieloma wzorami

  5. Dlaczego redis nie może ustawić maksymalnego otwartego pliku?