Docker - komunikacja kontenerów z wykorzystaniem opcji network

Stronę tą wyświetlono już: 38 razy

Poprzednio przedstawiona metoda komunikacji wymaga wiedzy na temat adresu IP kontenera, z którym chcesz się komunikować. Nie jest to na dłuższą metę najlepszy pomysł chociażby dlatego, że nie ma pewności że adres IP uruchomionej instancji konteneera nie ulegnie zmianie. Poza tym kontenerów, które mogą chcieć się komunikować z sobą może być znacznie więcej. Na szczęście Docker umożliwia utworzenie własnej sieci network, wewnątrz której kontenery będą się mogły komunikować bez konieczności użycia adresu IP. W tym celu konieczne będzie utworzenie takiej sieci:

docker network create net-wishes       
a3e3fd362e3ea7c209e65ee543221c36855132000f222b4fe87526760e47df7a

Teraz można uruchomić kontener wewnątrz utworzonej sieci korzystając z opcji --network w następujący sposób:

docker run -d --network net-wishes --name mongodb mongo
414ef4ac05b2b338deedacb86706725edc96eab163ec16483952918d8bc02945

I ostatnia część, wymagająca zmian w poprzednim projekcie prostego serwera napisanego w node, a dokładnie w linijce konfigurującej połączenie z bazą:

Listing 1
  1. mongoose.connect(
  2. 'mongodb://host.docker.internal:27017/wisches',

Jak widać tym razem zamiast wpisywać adres IP używam specjalnie przygotowanego odwołania host.docker.internal dzięki któremu Docker wstawi w to miejsce odpowiedni adres IP. Możliwe jest również bezpośrednie odwołanie do innego kontenera po jego nazwie:

Listing 2
  1. mongoose.connect(
  2. 'mongodb://mongodb:27017/wisches',

Po wprowadzeniu tych jakże znaczących zmian w projekcie można przebudować obraz:

docker build -t node-api:1.0 .

a następnie uruchomić kontener:

docker run -p 8889:8888 --name node -v "${pwd}:/app" --network net-wishes --rm -it node-api:1.0


> serwer-docker@1.0.0 start /app
> nodemon -L index.js

[nodemon] 2.0.16
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`

Pozostało przetestowanie, czy aby na pewno działa np. za pomocą Postman-a.

Docker - mongodb wysyłka żądania za pomocą Postmana
Rys. 1
Docker - MongoDb wysyłka żądania za pomocą Postman-a

Załączniki:

Server przygotowany do komunikacji przez sieć kontenera z kontenerem bazy danych MongoDb o nazwie mongodb

Komentarze