ホームページ  >  記事  >  バックエンド開発  >  Golang テストコンテナ、ネットワークを動作させることができません

Golang テストコンテナ、ネットワークを動作させることができません

WBOY
WBOY転載
2024-02-14 13:30:091062ブラウズ

Golang testcontainers,无法使网络工作

php エディターのイチゴは、Golang テストコンテナの使用時に問題が発生しました。つまり、ネットワークを適切に動作させることができませんでした。 Golang testcontainers は、テストでコンテナを実行するためのツールであり、開発者がテスト環境でコンテナを迅速に起動および破棄するのに役立ちます。しかし、実際に使用してみると、PHPエディタStrawberryではコンテナ内でネットワーク機能が正常に利用できず、テスト中に何らかの問題が発生することが判明しました。次に、この問題の解決策を一緒に考えていきます。

質問内容

マイクロサービスでいくつかのテストを作成しようとしています。データベース テスト コンテナー (postgres) とマイクロサービス テスト コンテナーをこのネットワークに接続するためのネットワークを作成したいと考えています。何を試しても、マイクロサービスをデータベースに接続できません。私のマイクロサービスは、Fiber と Gorm を使用した golang です。次のように db.go 構成ファイルでデータベースに接続しようとします。 リーリー

これは私のテスト コンテナーの外観です:

リーリー リーリー

docker でのネットワーク接続プロセスで何が起こっているのか理解できないからかもしれませんが、HOST と DB_PORT の環境をセットアップするときに、本当に迷ってしまいました (実際にすべての組み合わせを試してみました) )、データベース マイクロサービスへの接続を拒否します

私が試したマイクロサービスのテストコンテナ内:

リーリー

prescriptionDBHost の抽出方法は次のとおりです:

リーリー

エラーメッセージが表示される:

リーリー

次に、ホスト名から「/」を削除してみました。例:

リーリー

私も試してみました:

リーリー リーリー リーリー

ここにある最後の 4 つの例はすべて、何らかのダイヤルアップ TCP エラーを引き起こします。例:

リーリー

また、testcontainer でデータベース コンテナーを作成した後にデバッグして停止し、マイクロサービスに移動して、DB_HOST=localhost と port= を使用してコンテナーへの接続をハードコーディングしました。それが機能したため、何が起こっているのか本当にわかりません。起こったことは間違っていた。唯一考えられるのは、データベースに接続する前にマイクロサービス コンテナーがネットワークに接続されていないということです。 Docker ネットワーク チェックを行ったところ、データベース コンテナーがアタッチされていることがわかりましたが、マイクロサービスはアタッチされません (ただし、それは単に他の理由によるものでしょうか?)。

解決策

これを行うことができます:

リーリー

NetworkAliases

がどのように構成されているかに注意してください。コードでは両方を db-network に設定していますが、これは誤解によるものだと思います。この設定では、コンテナを参照できるエイリアスを構成します (この例では、postgres コンテナとして postgres を使用しています。これは、URL に従って HOST に接続するときに、上記の例で使用されている場合、postgrespostgres になります)。 代わりに、

port, err := precision DBContainer.MappedPort(context.Background(), "5432/tcp")

を使用することもできます。ホスト上で公開されているポートを取得してから、 port host.docker.internal port.Port(). このメソッドは、テスト対象のアプリケーションがコンテナー内ではなくホスト上で実行されている場合によく使用されます (ただし、この場合はこの場合、localhost に接続し、MappedPort()) から返されたレポートを使用します。

以上がGolang テストコンテナ、ネットワークを動作させることができませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。