web-dev-qa-db-ja.com

Dockerコンテナからローカルmongodbに接続する

Mongodb://127.0.0.1:27017で実行されているローカルmongoDBサーバーがあります。私のDB名はlocalv2です。次のように、Dockerfileを含むノード/エクスプレスアプリがあります。

FROM node:7.5

RUN npm install -g pm2

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app
RUN npm install

COPY . /usr/src/app

EXPOSE 3002

ENV NODE_ENV local

CMD pm2 start --no-daemon server.js

Server.jsファイルには、次のコードを使用してローカルmongodbへの接続があります。

app.db = mongoose.connect("mongodb://127.0.0.1:27017/localv2", options);

上記のDockerfileを使用して作成されたイメージからコンテナーをスピンアップすると、これは機能しません。 Dockerが独自のgatway IPアドレスを使用してVLANを作成します。コンテナをdocker inspectすると、ゲートウェイIPアドレス:172.17.0.1。

Mongodb接続を

app.db = mongoose.connect("mongodb://172.17.0.1:27017/localv2", options)

画像を再構築して新しいコンテナを開始しても、まだエラーが発生します:

MongoError: failed to connect to server [172.17.0.1:27017] on first connect [MongoError: connect ECONNREFUSED 172.17.0.1:27017]

コンテナを実行するコマンド:docker run -p 3002:3002 image-name

助けてください。

21
chaudharyp

@ vlad-holubievをここに答えとして追加すると、私にとってはうまく機能し、ユーザーが見つけやすくなります。

ドキュメントで指定されている docker runのネットワークホストオプション の使用:

ネットワークをホストに設定すると、コンテナはホストのネットワークスタックを共有し、ホストからのすべてのインターフェースがコンテナで利用可能になります。コンテナのホスト名は、ホストシステムのホスト名と一致します。

docker run -d -e ROOT_URL=http://localhost -e MONGO_URL=mongodb://localhost:27017 --network="Host"
16
elpddev

Docker for Macでは、Host.docker.internal mongoがローカルホストで実行されている場合。 mongoホストのenv変数でコードを読み取って、Dockerfileで次のように設定できます。

ENV MONGO_Host "Host.docker.internal"

https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds の詳細についてはこちらをご覧ください

13
airpower44

Dockerコンテナはコンピュータとは別のものであり、
したがって、localhostに接続できません。
コンテナでmongoサーバーを実行し、イメージ名で接続する必要があります。

mongodb://CONTAINER-NAME:port
11
Daniel Taub