ホームページ > バックエンド開発 > Golang > Docker コンテナ内の Go アプリケーションをローカルの MongoDB インスタンスに接続するにはどうすればよいですか?

Docker コンテナ内の Go アプリケーションをローカルの MongoDB インスタンスに接続するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-16 19:07:03
オリジナル
1017 人が閲覧しました

How can I connect a Go application in a Docker container to a local MongoDB instance?

ローカル Mongo 接続を使用した Go アプリの Docker 化

Docker を使用して Golang プロジェクトに取り組む場合、ローカル MongoDB データベースを統合すると、接続の課題が生じます。 MongoDB を使用する Go プロジェクトが Docker の外部で実行される場合、データベース接続は成功します。ただし、同じプロジェクトが Docker コンテナ内で実行されると、接続は失敗します。

問題について

Docker は、コンテナ化されたアプリケーション用の仮想環境を作成します。これは、コンテナがホスト システムとは異なる別のネットワーク スペースで実行されることを意味します。その結果、ローカルで実行されている MongoDB インスタンスなどの外部リソースへの接続に問題が生じます。

解決策: host.docker.internal を使用する

Docker は一意の IP アドレスを割り当てます。各コンテナに特別なホスト名「host.docker.internal」を提供します。このホスト名は、コンテナ内からホスト システムに接続するためのゲートウェイとして機能します。 MongoDB はホスト システム上でローカルに実行されているため、ホスト名として「host.docker.internal」を使用すると接続の問題が解決されます。

変更された Dockerfile

このソリューションを組み込むには、Dockerfile を次のように変更します。

FROM golang
WORKDIR $GOPATH/src/myapp
ADD . /go/src/myapp
RUN go get ./...
RUN go install myapp
ENV MONGO_HOST=host.docker.internal
CMD /go/bin/myapp --mongodbhost=$MONGO_HOST
EXPOSE 8080
EXPOSE 27017
ログイン後にコピー

接続文字列

Go アプリケーション内で、「host.docker.internal」を使用するように MongoDB 接続文字列を更新します。ホスト名。例:

connectionString := fmt.Sprintf("mongodb://host.docker.internal:21017/database")
client, err := mongo.Connect(ctx, options.Client().ApplyURI(connectionString))
ログイン後にコピー

以上がDocker コンテナ内の Go アプリケーションをローカルの MongoDB インスタンスに接続するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート