1. SzenarioVerwenden Sie Windows und WSL2 für die tägliche Entwicklungs- und Testarbeit. Bei wsl2 treten jedoch häufig Netzwerkprobleme auf. Heute teste ich beispielsweise ein Projekt, dessen Kernfunktion darin besteht, Postgres-Daten mithilfe der Open-Source-Komponente Synch mit Clickhouse zu synchronisieren. Zum Testen erforderliche Komponenten
Beim Testen zu Beginn wurde als Lösung gewählt, die oben genannten fünf Dienste mit Docker-Compose zu orchestrieren, und network_modules verwendete den Hosts-Modus. In Anbetracht des Abhörsicherheitsmechanismus von Kafka erfordert dieser Netzwerkmodus keine separate Angabe der freigegebenen Ports. Die Datei docker-compose.yaml sieht wie folgt aus Version: "3" Leistungen: postgres: Bild: failymao/postgres:12.7 Containername: postgres Neustart: sofern nicht gestoppt privilegiert: true # Docker-Compose-Umgebungsdatei festlegen Befehl: [ "-c", "config_file=/var/lib/postgresql/postgresql.conf", "-c", "hba_file=/var/lib/postgresql/pg_hba.conf" ] Bände: - ./config/postgresql.conf:/var/lib/postgresql/postgresql.conf - ./config/pg_hba.conf:/var/lib/postgresql/pg_hba.conf Umfeld: POSTGRES_PASSWORD: abc123 POSTGRES_USER: postgres POSTGRES_PORT: 15432 POSTGRES_HOST: 127.0.0.1 Gesundheitscheck: Test: sh -c "sleep 5 && PGPASSWORD=abc123 psql -h 127.0.0.1 -U postgres -p 15432 -c '\q';" Intervall: 30s Zeitüberschreitung: 10 s Wiederholungsversuche: 3 Netzwerkmodus: "Host" Tierpfleger: Bild: failymao/zookeeper:1.4.0 Containername: Zookeeper Neustart: immer Netzwerkmodus: "Host" Kafka: Bild: failymao/kafka:1.4.0 Containername: Kafka Neustart: immer hängt ab von: - Tierpfleger Umfeld: KAFKA_ADVERTISED_HOST_NAME: kafka KAFKA_ZOOKEEPER_CONNECT: localhost:2181 KAFKA_LISTENERS: PLAINTEXT://127.0.0.1:9092 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092 KAFKA_BROKER_ID: 1 KAFKA_LOG_RETENTION_HOURS: 24 KAFKA_LOG_DIRS: /data/kafka-data #Daten mountnetwork_mode: "host" Produzent: hängt ab von: - Redis - Kafka - Tierpfleger Bild: long2ice/synch Containername: Produzent Befehl: sh -c " 30 schlafen && synch --alias pg2ch_test produzieren" Bände: - ./synch.yaml:/synch/synch.yaml Netzwerkmodus: "Host" # Ein Verbraucher verbraucht einen Datenbankverbraucher: tty: wahr hängt ab von: - Redis - Kafka - Tierpfleger Bild: long2ice/synch Containername: Verbraucher Befehl: sh -c "schlafe 30 && synch --alias pg2ch_test verwenden --schema pg2ch_test" Bände: - ./synch.yaml:/synch/synch.yaml Netzwerkmodus: "Host" Redis: Hostname: Redis Containername: Redis Bild: redis:latest Bände: - redis:/Daten Netzwerkmodus: "Host" Bände: Redis: Kafka: Tierpfleger: Während des Tests mussten wir Postgres- und Wal2Json-Komponenten verwenden. Es war sehr mühsam, die Komponenten separat im Container zu installieren. Nach mehreren Versuchen scheiterten wir. Daher entschieden wir uns, den Postgres-Dienst auf dem Host-Computer zu installieren. Der Synchronisierungsdienst im Container verwendet die IP und den Port des Host-Computers. Aber nach dem Neustart des Dienstes kann der Synchronisierungsdienst immer noch nicht gestartet werden, und das Protokoll zeigt, dass Postgres keine Verbindung herstellen kann. Die Synchronisierungskonfigurationsdatei lautet wie folgt Kern: debug: true # wenn auf True gesetzt, werden SQL-Informationen angezeigt. insert_num: 20000 # wie viele Zahlen sollen übermittelt werden, es wird empfohlen, bei der Produktion 20000 einzustellen insert_interval: 60 # wie viele Sekunden gesendet werden sollen, empfehlen wir die Einstellung 60 bei der Produktion # Aktivieren Sie dies, um automatisch eine Datenbanksynchronisierung in ClickHouse zu erstellen und Monitordaten einzufügen Überwachung: wahr Redis: Gastgeber: Redis Port: 6379 Anzahl der Zeichen: 0 Passwort: Präfix: synch sentinel: false # Redis-Sentinel aktivieren sentinel_hosts: # Redis-Sentinel-Hosts 127.0.0.1:5000 sentinel_master: Meister queue_max_len: 200000 # maximale Streamlänge, redundante werden mit FIFO gelöscht Quelldatenbank: -db_typ: postgres Alias: pg2ch_test broker_type: kafka # unterstützt derzeit Redis und Kafka Host: 127.0.0.1 Port: 5433 Benutzer: postgres Passwort: abc123 Datenbanken: - Datenbank: pg2ch_test auto_create: wahr Tabellen: - Tabelle: pgbench_accounts auto_full_etl: wahr clickhouse_engine: ZusammenklappenMergeTree sign_column: Zeichen Versionsspalte: partition_by: Einstellungen: Klickhaus: # Shard-Hosts werden beim Cluster nach dem Zufallsprinzip eingefügt Gastgeber: – 127.0.0.1:9000 Benutzer: Standard Passwort: '' cluster_name: # Cluster-Modus aktivieren, wenn nicht leer, und es muss mehr als einen Host geben, wenn aktiviert. distributed_suffix: _all # Suffix für verteilte Tabellen, im Cluster verfügbar Kafka: Server: – 127.0.0.1:9092 topic_prefix: synchronisieren Diese Situation ist sehr merkwürdig. Stellen Sie zunächst sicher, dass Postgres gestartet ist und der Abhörport (hier 5433) normal ist. Sowohl localhost als auch die Host-Eth0-Netzwerkkartenadresse melden Fehler. 2. LösungGoogle-Antwort, siehe hochgelobte Antwort von Stackoverflow, das Problem ist gelöst, die ursprüngliche Antwort lautet wie folgt
Weitere Einzelheiten finden Sie im Quellbeitrag. Im Hostmodus greifen Dienste in Containern auf Dienste auf dem Hostcomputer zu Um den Fehler zu beheben, ändern Sie die Postgres-Abhöradresse in host.docker.internal. Überprüfen Sie die Datei /etc/hosts des Hostcomputers wie folgt root@failymao-NC:/mnt/d/pythonProject/pg_2_ch_demo# cat /etc/hosts # Diese Datei wurde automatisch von WSL generiert. Um die automatische Generierung dieser Datei zu stoppen, fügen Sie den folgenden Eintrag zu /etc/wsl.conf hinzu: # [Netzwerk] # generateHosts = false 127.0.0.1 lokaler Host 10.111.130.24 host.docker.internal Sie können die Zuordnung zwischen der Host-IP und dem Domänennamen sehen. Durch Zugriff auf den Domänennamen wird dieser in die Host-IP aufgelöst und greift auf den Host-Dienst zu. Abschließend ist die Konfiguration des Synch-Dienstes wie folgt: Kern: debug: true # wenn auf True gesetzt, werden SQL-Informationen angezeigt. insert_num: 20000 # wie viele Zahlen sollen übermittelt werden, es wird empfohlen, bei der Produktion 20000 einzustellen insert_interval: 60 # wie viele Sekunden gesendet werden sollen, empfehlen wir die Einstellung 60 bei der Produktion # Aktivieren Sie dies, um automatisch eine Datenbanksynchronisierung in ClickHouse zu erstellen und Monitordaten einzufügen Überwachung: wahr Redis: Gastgeber: Redis Port: 6379 Anzahl der Zeichen: 0 Passwort: Präfix: synch sentinel: false # Redis-Sentinel aktivieren sentinel_hosts: # Redis-Sentinel-Hosts 127.0.0.1:5000 sentinel_master: Meister queue_max_len: 200000 # maximale Streamlänge, redundante werden mit FIFO gelöscht Quelldatenbank: -db_typ: postgres Alias: pg2ch_test broker_type: kafka # unterstützt derzeit Redis und Kafka Host: host.docker.internal Port: 5433 Benutzer: postgres Passwort: abc123 Datenbanken: - Datenbank: pg2ch_test auto_create: wahr Tabellen: - Tabelle: pgbench_accounts auto_full_etl: wahr clickhouse_engine: ZusammenklappenMergeTree sign_column: Zeichen Versionsspalte: partition_by: Einstellungen: Klickhaus: # Shard-Hosts werden beim Cluster nach dem Zufallsprinzip eingefügt Gastgeber: – 127.0.0.1:9000 Benutzer: Standard Passwort: '' cluster_name: # Cluster-Modus aktivieren, wenn nicht leer, und es muss mehr als einen Host geben, wenn aktiviert. distributed_suffix: _all # Suffix für verteilte Tabellen, im Cluster verfügbar Kafka: Server: – 127.0.0.1:9092 topic_prefix: Host synchronisieren: host.docker.internal Kern: debug: true # wenn auf True gesetzt, werden SQL-Informationen angezeigt. insert_num: 20000 # wie viele Zahlen sollen übermittelt werden, es wird empfohlen, bei der Produktion 20000 einzustellen insert_interval: 60 # wie viele Sekunden gesendet werden sollen, empfehlen wir die Einstellung 60 bei der Produktion # Aktivieren Sie dies, um automatisch eine Datenbanksynchronisierung in ClickHouse zu erstellen und Monitordaten einzufügen Überwachung: wahr Redis: Gastgeber: Redis Port: 6379 Anzahl der Zeichen: 0 Passwort: Präfix: synch sentinel: false # Redis-Sentinel aktivieren sentinel_hosts: # Redis-Sentinel-Hosts 127.0.0.1:5000 sentinel_master: Meister queue_max_len: 200000 # maximale Streamlänge, redundante werden mit FIFO gelöscht Quelldatenbank: -db_typ: postgres Alias: pg2ch_test broker_type: kafka # unterstützt derzeit Redis und Kafka Gastgeber: Port: 5433 Benutzer: postgres Passwort: abc123 Datenbanken: - Datenbank: pg2ch_test auto_create: wahr Tabellen: - Tabelle: pgbench_accounts auto_full_etl: wahr clickhouse_engine: ZusammenklappenMergeTree sign_column: Zeichen Versionsspalte: partition_by: Einstellungen: Klickhaus: # Shard-Hosts werden beim Cluster nach dem Zufallsprinzip eingefügt Gastgeber: – 127.0.0.1:9000 Benutzer: Standard Passwort: '' cluster_name: # Cluster-Modus aktivieren, wenn nicht leer, und es muss mehr als einen Host geben, wenn aktiviert. distributed_suffix: _all # Suffix für verteilte Tabellen, im Cluster verfügbar Kafka: Server: – 127.0.0.1:9092 topic_prefix: synchronisieren 3. Fazit Wenn Sie beim Starten eines Containers im Modus --networks="host" auf Dienste auf dem Host im Container zugreifen möchten, ändern Sie die IP in `host.docker.internal` 4. Referenzenhttps://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach Dies ist das Ende dieses Artikels über die Implementierung von Diensten in Docker, die auf Hostdienste zugreifen. Weitere relevante Inhalte zum Docker-Zugriff auf den Host finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Zusammenfassung des CSS-Zählers und des Inhalts
>>: Detaillierte Erklärung verschiedener Bildformate wie JPG, GIF und PNG
Inhaltsverzeichnis Vorwort 1. Binärer Baum 1.1. D...
In Vue haben wir im Allgemeinen Front-End- und Ba...
In diesem Artikel finden Sie das Tutorial zur Ins...
【Vorwort】 Ich möchte vor Kurzem das Prüfungssyste...
Inhaltsverzeichnis Verschiedene Möglichkeiten zum...
Informationen zum Miniprogramm-Datencache Datenca...
Inhaltsverzeichnis 1. Grundkenntnisse der Indizie...
Vorwort Durch die Verwendung von Docker und VS Co...
Genau wie dieser Effekt ist auch die Methode sehr...
Teil 1 HTML <html> – Start-Tag <Kopf>...
Hintergrund In letzter Zeit werde ich in Intervie...
Ich bin erst kürzlich zufällig auf diese kleine A...
Bereiten Sie eine CentOS6-Installationsdiskette (...
Beim Erstellen einer Webseite verwenden Sie manchm...
zabbix_agent-Bereitstellung: Empfehlung: zabbix_a...