2016-12-16 32 views
5

Tôi đã xây dựng một thùng chứa docker chạy một thể hiện mongodb, mà phải được tiếp xúc với máy chủ. Tuy nhiên, khi tôi muốn kết nối từ máy chủ vào thùng chứa mongodb, kết nối sẽ bị từ chối.Không thể kết nối với mongodb trong ngăn chứa docker

Đây là Dockerfile tôi:

FROM mongo:latest 

RUN mkdir -p /var/lib/mongodb && \ 
    touch /var/lib/mongodb/.keep && \ 
    chown -R mongodb:mongodb /var/lib/mongodb 

ADD mongodb.conf /etc/mongodb.conf 

VOLUME [ "/var/lib/mongodb" ] 

EXPOSE 27017 

USER mongodb 
WORKDIR /var/lib/mongodb 

ENTRYPOINT ["/usr/bin/mongod", "--config", "/etc/mongodb.conf"] 
CMD ["--quiet"] 

/etc/mongodb.conf:

Và đây là config-file cho MongoDB, nơi tôi ràng buộc IP 0.0.0.0 rõ ràng như được tìm thấy here on SO, rằng 127.0.0.1 có thể là nguyên nhân gốc rễ của vấn đề của tôi (nhưng không phải là)

systemLog: 
    destination: file 
    path: /var/log/mongodb/mongo.log 
    logAppend: true 
storage: 
    dbPath: /var/lib/mongodb 
net: 
    bindIp: 0.0.0.0 

Container Docker đang chạy, nhưng một kết nối từ máy chủ là không thể:

host$ docker run -p 27017:27017 -d --name mongodb-test mongodb-image 
host$ docker ps 
$ docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS      NAMES 
6ec958034a6f  mongodb-image  "/usr/bin/mongod --co" 4 seconds ago  Up 3 seconds  0.0.0.0:27017->27017/tcp mongodb-test 

Tìm IP-Địa chỉ:

host$ docker inspect 6ec958034a6f |grep IPA 
      "SecondaryIPAddresses": null, 
      "IPAddress": "172.17.0.2", 
        "IPAMConfig": null, 
        "IPAddress": "172.17.0.2", 

Cố gắng kết nối:

host$ mongo 172.17.0.2:27017 
MongoDB shell version v3.4.0 
connecting to: mongodb://172.17.0.2:27017 
2016-12-16T15:53:40.318+0100 W NETWORK [main] Failed to connect to 172.17.0.2:27017 after 5000 milliseconds, giving up. 
2016-12-16T15:53:40.318+0100 E QUERY [main] Error: couldn't connect to server 172.17.0.2:27017, connection attempt failed : 
[email protected]/mongo/shell/mongo.js:234:13 
@(connect):1:6 
exception: connect failed 

Khi tôi ssh vào container, tôi có thể kết nối với mongo và liệt kê cơ sở dữ liệu thử nghiệm thành công.

+3

Bạn đã chỉ định cổng được ánh xạ là 28001, tại sao bạn kết nối với cổng 27017? – mustaccio

+3

Thử 'localhost: 28001' trong trình duyệt trên máy chủ của bạn – user2915097

+1

28001 là lỗi sao chép-dán từ lần thử khác. tôi đã thay thế nó bằng 27017 trong câu hỏi. Và vấn đề vẫn là cùng một btw. thx cho gợi ý @mustaccio – delete

Trả lời

1

Sử dụng máy chủ cục bộ thay vì ip, cho phép kết nối.

Kết hợp nó với cổng tiếp xúc: localhost: 27017

Tôi đã thử nghiệm giải pháp như nó đã được ghi trong các ý kiến, và nó hoạt động.

Các vấn đề liên quan