1. シナリオ日常の開発およびテスト作業には Windows と WSL2 を使用します。 しかし、wsl2 ではネットワークの問題が頻繁に発生します。たとえば、今日私は、オープンソース コンポーネント synch を使用して postgres データを clickhouse に同期することを主な機能とするプロジェクトをテストしています。 テストに必要なコンポーネント
当初のテストでは、docker-compose を使用して上記 5 つのサービスをオーケストレーションし、network_modules で hosts モードを使用するというソリューションを選択しました。Kafka のリスニング セキュリティ メカニズムを考慮すると、このネットワーク モードでは公開ポートを個別に指定する必要はありません。 docker-compose.yamlファイルは以下のとおりです バージョン: "3" サービス: ポストグル: 画像: failymao/postgres:12.7 コンテナ名: postgres 再起動: 停止しない限り privileged: true # docker-compose 環境変数を設定するコマンド: [ "-c", "config_file=/var/lib/postgresql/postgresql.conf", "-c", "hba_file=/var/lib/postgresql/pg_hba.conf" ] ボリューム: - ./config/postgresql.conf:/var/lib/postgresql/postgresql.conf - ./config/pg_hba.conf:/var/lib/postgresql/pg_hba.conf 環境: POSTGRES_パスワード: abc123 POSTGRES_USER: postgres ポート: 15432 POSTGRES_ホスト: 127.0.0.1 ヘルスチェック: テスト: sh -c "sleep 5 && PGPASSWORD=abc123 psql -h 127.0.0.1 -U postgres -p 15432 -c '\q';" 間隔: 30秒 タイムアウト: 10秒 再試行: 3 ネットワークモード: "ホスト" 飼育員: 画像: failymao/zookeeper:1.4.0 コンテナ名: 飼育係 再起動: 常に ネットワークモード: "ホスト" カフカ: 画像: failymao/kafka:1.4.0 コンテナ名: kafka 再起動: 常に 依存: - 動物園の飼育員 環境: KAFKA_ADVERTISED_HOST_NAME: カフカ KAFKA_ZOOKEEPER_CONNECT: ローカルホスト:2181 KAFKA_LISTENERS: プレーンテキスト://127.0.0.1:9092 KAFKA_ADVERTISED_LISTENERS: プレーンテキスト://127.0.0.1:9092 KAFKA_ブローカーID: 1 KAFKA_ログ保持時間: 24 KAFKA_LOG_DIRS: /data/kafka-data #データ mountnetwork_mode: "host" プロデューサー: 依存: - レディス - カフカ - 動物園の飼育員 画像: long2ice/synch コンテナ名: プロデューサー コマンド: sh -c " 睡眠30 && 同期 --alias pg2ch_test 生成" ボリューム: - ./synch.yaml:/synch/synch.yaml ネットワークモード: "ホスト" # コンシューマーはデータベース コンシューマーを消費します: 端末: 真 依存: - レディス - カフカ - 動物園の飼育員 画像: long2ice/synch コンテナ名: コンシューマー コマンド: sh -c 「30分寝て 同期 --alias pg2ch_test 消費 --schema pg2ch_test" ボリューム: - ./synch.yaml:/synch/synch.yaml ネットワークモード: "ホスト" レディス: ホスト名: redis コンテナ名: redis 画像: redis:latest ボリューム: - redis:/データ ネットワークモード: "ホスト" ボリューム: レディス: カフカ: 飼育員: テスト中は、postgres と wal2json コンポーネントを使用する必要がありました。コンテナにコンポーネントを個別にインストールするのは非常に面倒でした。何度か試しましたが、失敗しました。そこで、ホスト マシンに postgres サービスをインストールすることにしました。コンテナ内の同期サービスは、ホスト マシンの IP とポートを使用します。 しかし、サービスを再起動した後、同期サービスはまだ起動できず、ログにはpostgresが接続できないと表示されます。同期構成ファイルは次のとおりです。 コア: debug: true # True に設定すると、SQL 情報が表示されます。 insert_num: 20000 # 送信するnumの数。本番環境では20000に設定することを推奨します。 insert_interval: 60 # 送信する秒数。本番環境では60に設定することを推奨します。 # これを有効にすると、ClickHouse でデータベース `synch` が自動的に作成され、モニターデータが挿入されます 監視: 有効 レディス: ホスト: redis ポート: 6379 デシベル: 0 パスワード: プレフィックス: 同期 sentinel: false # redis sentinel を有効にする sentinel_hosts: # redis センチネルホスト - 127.0.0.1:5000 sentinel_master: マスター queue_max_len: 200000 # ストリームの最大長。FIFO で冗長なものを削除します。 ソースDB: -db_type: ポストグル エイリアス: pg2ch_test broker_type: kafka # 現在、redis と kafka をサポートしています ホスト: 127.0.0.1 ポート: 5433 ユーザー: postgres パスワード: abc123 データベース: - データベース: pg2ch_test 自動作成: 有効 表: - テーブル: pgbench_accounts 自動フルETL: 有効 clickhouse_engine: マージツリーの折りたたみ sign_column: サイン バージョン列: パーティションの基準: 設定: クリックハウス: # クラスターの場合、シャードホストはランダムに挿入されます ホスト: - 127.0.0.1:9000 ユーザー: デフォルト パスワード: '' cluster_name: # 空でない場合はクラスター モードを有効にします。有効にする場合は、ホストが複数である必要があります。 分散テーブルサフィックス: _all # クラスターで使用可能な分散テーブルサフィックス カフカ: サーバー: - 127.0.0.1:9092 topic_prefix: 同期 この状況は非常に奇妙です。まず、postgres が起動しており、リスニング ポート (ここでは 5433) が正常であることを確認します。localhost とホストの eth0 ネットワーク カード アドレスの両方でエラーが報告されています。 2. 解決策Googleの回答、stackoverflowの高評価の回答を参照すると、問題は解決しました。元の回答は次のとおりです。
詳細についてはソース投稿をご覧ください ホストモードでは、コンテナ内のサービスはホストマシン上のサービスにアクセスします。 エラーを解決するには、postgres リスニング アドレスを host.docker.internal に変更します。 ホストマシンの/etc/hostsファイルを次のように確認します。 root@failymao-NC:/mnt/d/pythonProject/pg_2_ch_demo# cat /etc/hosts # このファイルは WSL によって自動的に生成されました。このファイルの自動生成を停止するには、/etc/wsl.conf に次のエントリを追加します。 # [ネットワーク] # 生成ホスト = false 127.0.0.1 ローカルホスト 10.111.130.24 ホスト.docker.内部 ホスト IP とドメイン名のマッピングを確認できます。ドメイン名にアクセスすると、ホスト IP に解決され、ホスト サービスにアクセスします。 最後に、同期サービスの構成は次のとおりです。 コア: debug: true # True に設定すると、SQL 情報が表示されます。 insert_num: 20000 # 送信するnumの数。本番環境では20000に設定することを推奨します。 insert_interval: 60 # 送信する秒数。本番環境では60に設定することを推奨します。 # これを有効にすると、ClickHouse でデータベース `synch` が自動的に作成され、モニターデータが挿入されます 監視: 有効 レディス: ホスト: redis ポート: 6379 デシベル: 0 パスワード: プレフィックス: 同期 sentinel: false # redis sentinel を有効にする sentinel_hosts: # redis センチネルホスト - 127.0.0.1:5000 sentinel_master: マスター queue_max_len: 200000 # ストリームの最大長。FIFO で冗長なものを削除します。 ソースDB: -db_type: ポストグル エイリアス: pg2ch_test broker_type: kafka # 現在、redis と kafka をサポートしています ホスト: host.docker.internal ポート: 5433 ユーザー: postgres パスワード: abc123 データベース: - データベース: pg2ch_test 自動作成: 有効 表: - テーブル: pgbench_accounts 自動フルETL: 有効 clickhouse_engine: マージツリーの折りたたみ sign_column: サイン バージョン列: パーティションの基準: 設定: クリックハウス: # クラスターの場合、シャードホストはランダムに挿入されます ホスト: - 127.0.0.1:9000 ユーザー: デフォルト パスワード: '' cluster_name: # 空でない場合はクラスター モードを有効にします。有効にする場合は、ホストが複数である必要があります。 分散テーブルサフィックス: _all # クラスターで使用可能な分散テーブルサフィックス カフカ: サーバー: - 127.0.0.1:9092 topic_prefix: 同期ホスト: host.docker.internal コア: debug: true # True に設定すると、SQL 情報が表示されます。 insert_num: 20000 # 送信するnumの数。本番環境では20000に設定することを推奨します。 insert_interval: 60 # 送信する秒数。本番環境では60に設定することを推奨します。 # これを有効にすると、ClickHouse でデータベース `synch` が自動的に作成され、モニターデータが挿入されます 監視: 有効 レディス: ホスト: redis ポート: 6379 デシベル: 0 パスワード: プレフィックス: 同期 sentinel: false # redis sentinel を有効にする sentinel_hosts: # redis センチネルホスト - 127.0.0.1:5000 sentinel_master: マスター queue_max_len: 200000 # ストリームの最大長。FIFO で冗長なものを削除します。 ソースDB: -db_type: ポストグル エイリアス: pg2ch_test broker_type: kafka # 現在、redis と kafka をサポートしています ホスト: ポート: 5433 ユーザー: postgres パスワード: abc123 データベース: - データベース: pg2ch_test 自動作成: 有効 表: - テーブル: pgbench_accounts 自動フルETL: 有効 clickhouse_engine: マージツリーの折りたたみ sign_column: サイン バージョン列: パーティションの基準: 設定: クリックハウス: # クラスターの場合、シャードホストはランダムに挿入されます ホスト: - 127.0.0.1:9000 ユーザー: デフォルト パスワード: '' cluster_name: # 空でない場合はクラスター モードを有効にします。有効にする場合は、ホストが複数である必要があります。 分散テーブルサフィックス: _all # クラスターで使用可能な分散テーブルサフィックス カフカ: サーバー: - 127.0.0.1:9092 topic_prefix: 同期 3. 結論--networks="host" モードでコンテナを起動する場合、コンテナ内のホスト上のサービスにアクセスするには、IP を `host.docker.internal` に変更します。 4. 参考文献https://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach これで、docker でホスト サービスにアクセスするサービスの実装に関するこの記事は終了です。docker でホストにアクセスすることについての関連コンテンツをさらにご覧になりたい場合は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: JPG、GIF、PNGなどのさまざまな画像形式の詳細な説明
目次概要Vuex の 4 つの主要オブジェクト状態の使用突然変異の使用ゲッターの使用アクションの使用...
Alibaba Cloud セキュリティグループの概要Alibaba Cloud Server セ...
この記事では、Xshell と関連する構成の一般的な問題について説明します。この記事の構成は、主に ...
目次導入ステップ1ステップ2: アイデアで動的Webプロジェクトを作成するステップ3: Tomcat...
MySQL 8.0.22のダウンロード、インストール、設定方法、参考までに具体的な内容は次のとおりで...
目次1. データ操作言語 (DML) 2. データを追加する(挿入) 3. 既存のテーブルをコピーし...
Animation.css を使うと公式サイトのフォントがだんだんと変わっていくのが分かりました。c...
TypeScript を使用する場合、TypeScript が提供する型システムを使用してコードのあ...
目次1. テスト環境1.1 CentOS 7をインストールする1.2 Docker CE 19.03...
今日、CentOS6.2 をインストールしていたところ、ハード ドライブの検出段階を通過できませんで...
1. 複製原理マスター サーバーはバイナリ ログ ファイルに更新を書き込み、ログのローテーションを追...
目次fileReader に関する落とし穴iOS における FileReader の落とし穴 (イメ...
序文著者は、アプリケーションからフレームワーク、オペレーティング システムに至るまで、あらゆるコード...
目次トピック分析する使用目的解決:コードは次のように実装されます。分析:配列とポインタ解決:コードは...
<input> タグ<input> タグはユーザー情報を収集するために使用さ...