簡體   English   中英

無法從Linux主機連接到mongodb容器

[英]Cannot connect to mongodb container from linux host

我有以下僅安裝mongodb 3的Dockerfile

# Start with docker's base ubuntu image
FROM ubuntu:14.04.2

# Mongodb prerequisite
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
RUN echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list

# Update package sources
RUN apt-get -y update

# Install Mongodb binaries
RUN apt-get -y install mongodb-org

# Copy configuratio file
COPY mongod.conf /etc/mongod.conf

# Create mongo data path (will be mapped to a volume on host machine later on)
RUN mkdir -p /data/db
RUN chown -R mongodb:mongodb /data/db

# Expose MongoDB port
EXPOSE 27017

# Run mongo with mongodb user
USER mongodb

# Run mongod using provided configuration file
ENTRYPOINT ["/usr/bin/mongod"]
CMD ["--config", "/etc/mongod.conf"]

我用創建圖像

sudo docker build -t mongod .

我用

sudo docker run -d -P mongod

並確認它已經開始

> sudo docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                      NAMES
43c75e7e44b3        mongod:latest       "/usr/bin/mongod --c   3 minutes ago       Up 3 minutes        0.0.0.0:49165->27017/tcp   silly_mccarthy

當我從容器運行mongo客戶端時,它可以連接而沒有任何錯誤:

> sudo docker exec -ti 43c75e7e44b3 bash

$ mongo

MongoDB shell version: 3.0.1
connecting to: test
Welcome to the MongoDB shell.
....

我的主機是Ubuntu 14.04盒子,網絡接口/網橋是

docker0   Link encap:Ethernet  HWaddr 63:54:7b:f3:47:33
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          ....
em1       Link encap:Ethernet  HWaddr c4:2f:e3:64:ae:7c
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
          ....
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          ....

無法從主機連接到mongod容器

> mongo --port 49165

MongoDB shell version: 3.0.1
connecting to: 127.0.0.1:49165/test
2015-03-21T18:14:55.936+0100 I NETWORK  Socket recv() errno:104     Connection reset by peer 127.0.0.1:49165
2015-03-21T18:14:55.936+0100 I NETWORK  SocketException: remote:   127.0.0.1:49165 error: 9001 socket exception [RECV_ERROR] server [127.0.0.1:49165]
2015-03-21T18:14:55.936+0100 I NETWORK  DBClientCursor::init call() failed
2015-03-21T18:14:55.937+0100 E QUERY    Error: DBClientBase::findN: transport error: 127.0.0.1:49165 ns: admin.$cmd query: { whatsmyuri: 1 }
at connect (src/mongo/shell/mongo.js:181:14)
at (connect):1:6 at src/mongo/shell/mongo.js:181
exception: connect failed

我在這里想念什么嗎?

MongoDB的默認配置是將mongod綁定到localhost的IP。 mongod.conf搜索以下行:

bindIp = 127.0.0.1

如果您使用這樣的哈希將這一行注釋掉

# bindIp = 127.0.0.1

然后mongod將綁定到啟動過程中可用的所有 IP。 如果您這樣設置一個特定的IP

bindIp = 192.168.0.42

然后mongod僅綁定到該特定IP地址,並且僅對可以在指定端口上訪問該IP的主機可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM