sql >> Databáze >  >> NoSQL >> Redis

Komunikace mezi dvěma kontejnery Docker na macOS 10.12

Každý kontejner má svého vlastního localhost

Každá služba běží ve svém vlastním kontejneru. Z pohledu kontejneru Ubuntu redis neposlouchá na localhost.

Používejte sítě Docker

Aby vaše kontejnery mohly komunikovat, měly by být ve stejné síti Docker. Skládá se ze tří kroků:

  1. Vytvořte síť Docker
  2. Pojmenujte své kontejnery
  3. Připojte své kontejnery k síti, kterou jste vytvořili

Díky tomu mohou kontejnery mezi sebou mluvit pomocí svých jmen, jako by to byly názvy hostitelů.

Existuje více než jeden způsob, jak stáhnout tuto kočku z kůže... V této odpovědi se podívám na dva, ale pravděpodobně existuje několik dalších způsobů, jak to udělat, které neznám (jako například použití Kubernetes nebo Swarm).

Udělejte to ručně

Pro tuto aplikaci můžete vytvořit síť pomocí docker network příkazy.

# Show the current list of networks
docker network ls

# Create a network for your app
docker network create my_redis_app

Když spustíte kontejner redis, ujistěte se, že má název a je v této síti. Pokud chcete, můžete porty vystavit externě (pro macOS) (pomocí -p ), ale to není nutné pouze pro to, aby ostatní kontejnery mluvily s redis.

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

Nyní spusťte svůj kontejner Ubuntu. Pokud chcete, můžete jej také pojmenovat, ale v tomto příkladu se nebudu obtěžovat, protože tento neprovozuje žádné služby.

docker run -it --network my_redis_app ubuntu bash

Nyní z kontejneru Ubuntu byste měli být schopni dosáhnout redis pomocí názvu redis_server , jako by to byl název DNS.

Jak to udělat pomocí Compose

Mám tendenci vytvářet nastavení pomocí Compose, protože je snazší je zapsat do souboru YAML (IMO). Zde je příklad výše uvedeného, ​​přepsaný ve formě 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

S tímto na místě můžete spustit docker-compose up -d redis a mít svou službu redis online pomocí konkrétní sítě Docker. Compose vytvoří síť za vás, pokud ještě neexistuje.

Dává méně smysl spouštět kontejner Ubuntu tímto způsobem... je samozřejmě interaktivní. Ale předpokládám, že jakmile spustíte redis, přidáte nějaký aplikační kontejner a možná webový proxy, jako je nginx... ostatní umístěte do services také a můžete je spravovat všechny společně.

Od ubuntu je interaktivní, můžete jej spustit interaktivně:

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

A nyní v Ubuntu byste měli být schopni se připojit k redis pomocí jeho názvu, který je v tomto příkladu jednoduše redis .




  1. Jak mohu chránit svou cestu /sidekiq heslem (tj. vyžadovat ověření pro nástroj Sidekiq::Web)?

  2. Jak sdílet relaci mezi NodeJs a PHP pomocí Redis?

  3. K čemu slouží soubor mongo.lock?

  4. Jak na to:Přidejte Cloudera Search do svého clusteru pomocí Cloudera Manager