ローカル 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 サイトの他の関連記事を参照してください。