CodeGym /Kursy /Docker SELF /Rozwiązywanie problemów sieciowych

Rozwiązywanie problemów sieciowych

Docker SELF
Poziom 18 , Lekcja 2
Dostępny

8.1 Podstawowe kroki diagnostyki problemów sieciowych

Problemy sieciowe w Docker mogą występować z różnych powodów, takich jak nieprawidłowa konfiguracja sieci, problemy z DNS, konflikty adresów IP i inne. W tym wykładzie omówimy podstawowe metody diagnostyki i rozwiązywania problemów sieciowych w Docker.

Jeśli pojawiły się problemy sieciowe, wykonaj następujące kroki:

  1. Sprawdzenie stanu kontenerów i sieci
  2. Użycie narzędzi sieciowych wewnątrz kontenerów
  3. Sprawdzenie konfiguracji Docker i plików sieciowych
  4. Sprawdzenie dzienników systemowych Docker
  5. Użycie komend sieciowych Docker

8.2 Sprawdzanie stanu kontenerów i sieci

Pierwszym krokiem w diagnostyce problemów sieciowych jest sprawdzenie stanu kontenerów i sieci.

Sprawdzanie stanu kontenerów

Najpierw wyświetlimy wszystkie uruchomione kontenery. W tym celu użyjemy komendy docker ps:

Terminal

docker ps

Jeśli kontenery nie są uruchomione, może to świadczyć o problemach związanych z samym Dockerem lub konfiguracją kontenerów.

Sprawdzanie sieci

Komenda docker network ls wyświetla wszystkie sieci utworzone w Dockerze:

Terminal

docker network ls

Upewnij się, że wymagana sieć istnieje i kontenery są do niej podłączone.

8.3 Używanie narzędzi sieciowych wewnątrz kontenerów

Narzędzia sieciowe, takie jak ping, curl, netcat (lub nc) i nslookup, mogą pomóc w diagnozowaniu problemów wewnątrz kontenerów. Każde z tych narzędzi wykonuje swoje specyficzne zadanie:

  • ping — narzędzie do sprawdzania dostępności zdalnych hostów w sieci, wysyłając do nich zapytania ICMP.
  • curl — narzędzie do przesyłania danych za pomocą różnych protokołów, często używane do sprawdzania dostępności usług webowych.
  • netcat (nc) — uniwersalne narzędzie do pracy z połączeniami sieciowymi, pozwala tworzyć połączenia TCP/UDP i diagnozować dostępność portów.
  • nslookup — narzędzie do wyszukiwania informacji o rekordach DNS, na przykład do sprawdzania rozwiązywania nazw kontenerów.

Przykład użycia ping

Połącz się z kontenerem i sprawdź połączenie z innym kontenerem lub usługą, używając narzędzia ping do wysyłania zapytań ICMP:

Terminal

docker exec -it <container_name> ping <target_container_name_or_ip>

Przykład użycia curl

Sprawdź dostępność usługi webowej wewnątrz kontenera za pomocą narzędzia curl:

Terminal

docker exec -it <container_name> curl http://<target_service>

Przykład użycia nslookup

Użyj nslookup do sprawdzenia rozwiązywania nazw DNS kontenerów, co jest użyteczne w diagnostyce problemów z usługami sieciowymi:

Terminal

docker exec -it <container_name> nslookup <target_container_name>

Przykład użycia nc host port

Narzędzie nc jest używane do debugowania i diagnostyki połączeń sieciowych. Za pomocą komendy nc host port można nawiązać połączenie z podanym hostem i portem, sprawdzając dostępność portu na celu:

Terminal

docker exec -it <container_name> nc -zv 192.168.1.1 22

8.4 Sprawdzanie konfiguracji Docker i plików sieciowych

Nieprawidłowe konfiguracje Docker oraz plików sieciowych mogą powodować problemy sieciowe.

Sprawdzanie pliku docker-compose.yml

Upewnij się, że plik docker-compose.yml jest poprawnie skonfigurowany, a wszystkie sieci, usługi i porty są poprawnie określone.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - webnet
        
  db:
    image: postgres:latest
    ports:
      - "5432:5432"
    networks:
      - webnet
        
networks:
  webnet:
    driver: bridge

Sprawdzanie pliku /etc/docker/daemon.json

Sprawdź konfigurację Docker Daemon, jeśli została zmieniona:

JSON

{
  "dns": ["8.8.8.8", "8.8.4.4"],
  "fixed-cidr": "192.168.1.0/24"
}

8.5 Sprawdzanie dzienników systemowych Docker

Dzienniki systemowe Docker mogą zawierać przydatne informacje o błędach sieciowych i problemach.

Przeglądanie dzienników Docker

Użyj polecenia journalctl, aby przeglądać dzienniki Docker w systemach z systemd:

Terminal

journalctl -u docker.service

Przeglądanie logów kontenerów

Logi kontenerów również mogą pomóc w diagnozowaniu problemów sieciowych:

Terminal

docker logs <container_name>

8.6: Korzystanie z komend sieciowych Docker

Docker umożliwia korzystanie z komend diagnostycznych i zarządzania sieciami, takich jak docker network inspect i docker network connect.

Komenda docker network inspect

Ta komenda pozwala uzyskać szczegółowe informacje o sieci, w tym podłączonych kontenerach i ustawieniach IPAM.

Terminal

docker network inspect <network_name>

Przykład wyjścia komendy docker network inspect

JSON

[
    {
        "Name": "webnet",
        "Id": "e5e5e1b1a3e5",
        "Created": "2021-01-01T00:00:00.000000000Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Containers": {
            "container_id": {
                "Name": "web",
                "EndpointID": "6c52f8c75c1e",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

Komenda docker network connect

Jeśli kontener został błędnie podłączony do sieci, możesz go ręcznie podłączyć:

Terminal

docker network connect <network_name> <container_name>

8.7 Przykłady diagnozowania i rozwiązywania problemów

Przykład 1: Problemy z DNS zamianą nazwy domeny na IP

Jeśli kontenery nie mogą zamienić nazw hostów innych kontenerów, sprawdź ustawienia DNS:

Sprawdzanie ustawień DNS w docker-compose.yml:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    dns:
      - 8.8.8.8

Sprawdzanie DNS wewnątrz kontenera:

Terminal

docker exec -it <container_name> cat /etc/resolv.conf

Przykład 2: Problemy z dostępem do usług

Jeśli kontenery nie mogą uzyskać dostępu do usług na innych hostach:

Sprawdzanie opublikowanych portów:

Terminal

docker ps

Sprawdzanie reguł zapory sieciowej (firewall):

Upewnij się, że reguły zapory sieciowej nie blokują potrzebnych portów.

Przykład 3: Konflikt adresów IP

Jeśli masz konflikt adresów IP między kontenerami lub z hostem:

Sprawdzanie podsieci sieci:

Terminal

docker network inspect <network_name>

Zmiana podsieci:

Terminal

docker network create --subnet=192.168.2.0/24 my_network
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION