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:
- Sprawdzenie stanu kontenerów i sieci
- Użycie narzędzi sieciowych wewnątrz kontenerów
- Sprawdzenie konfiguracji Docker i plików sieciowych
- Sprawdzenie dzienników systemowych Docker
- 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
:
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:
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:
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
:
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:
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:
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.
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:
{
"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
:
journalctl -u docker.service
Przeglądanie logów kontenerów
Logi kontenerów również mogą pomóc w diagnozowaniu problemów sieciowych:
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.
docker network inspect <network_name>
Przykład wyjścia komendy docker network inspect
[
{
"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ć:
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:
version: '3.8'
services:
web:
image: nginx:latest
dns:
- 8.8.8.8
Sprawdzanie DNS
wewnątrz kontenera:
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:
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:
docker network inspect <network_name>
Zmiana podsieci:
docker network create --subnet=192.168.2.0/24 my_network
GO TO FULL VERSION