无法连接到 mongodb 容器主机

kmi*_*3sd 0 spring mongodb docker docker-compose

我试图连接到 mongodb 容器,但它不起作用,无法识别主机。

这是我的 docker-compose.yml 文件和服务:

  version: '3'
  services:

  mongodb:
    build:
      context: .
      dockerfile: docker/mongodb/Dockerfile
    restart: always
    environment:
      DATABASE: database
      USERNAME: user
      PASSWORD: pass
    ports:
      - '5100:27017'
    volumes:
      - ./data/db:/data/db
Run Code Online (Sandbox Code Playgroud)

这是我的 mongodb dockerfile:

FROM mvertes/alpine-mongo:4.0.5-0

ENV MONGO_INITDB_DATABASE: ${DATABASE}
ENV MONGO_INITDB_ROOT_USERNAME: ${USERNAME}
ENV MONGO_INITDB_ROOT_PASSWORD: ${PASSWORD}

COPY ./docker/mongodb/init.js /docker-entrypoint-initdb.d

CMD ["mongod"]

EXPOSE 27017
Run Code Online (Sandbox Code Playgroud)

我正在尝试从 spring 建立连接,但找不到该服务,我的属性中有:

spring.data.mongodb.host=mongodb
spring.data.mongodb.port=5100
spring.data.mongodb.username=user
spring.data.mongodb.password=pass
spring.data.mongodb.database=database
Run Code Online (Sandbox Code Playgroud)

我也在尝试与 robo3T 建立连接,问题是一样的:

Address: mongodb://mongodb
port:5100
Run Code Online (Sandbox Code Playgroud)

春天的错误说:

com.mongodb.MongoSocketException: mongodb: unknown name or service
Run Code Online (Sandbox Code Playgroud)

在 robo3T 中说:

Cannot connect to the MongoDB at mongodb:5100.

Error:
Network is unreachable.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

编辑:我的容器日志:

2019-03-16T16:22:00.714+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2019-03-16T16:22:00.750+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=1220eaf96d91
2019-03-16T16:22:00.750+0000 I CONTROL  [initandlisten] db version v4.0.5
2019-03-16T16:22:00.750+0000 I CONTROL  [initandlisten] git version: 3739429dd92b92d1b0ab120911a23d50bf03c412
2019-03-16T16:22:00.750+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.1.1a  20 Nov 2018
2019-03-16T16:22:00.750+0000 I CONTROL  [initandlisten] allocator: system
2019-03-16T16:22:00.750+0000 I CONTROL  [initandlisten] modules: none
2019-03-16T16:22:00.750+0000 I CONTROL  [initandlisten] build environment:
2019-03-16T16:22:00.750+0000 I CONTROL  [initandlisten]     distarch: x86_64
2019-03-16T16:22:00.750+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2019-03-16T16:22:00.750+0000 I CONTROL  [initandlisten] options: {}
2019-03-16T16:22:00.760+0000 I STORAGE  [initandlisten] 
2019-03-16T16:22:00.760+0000 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2019-03-16T16:22:00.760+0000 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2019-03-16T16:22:00.768+0000 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1432M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2019-03-16T16:22:01.523+0000 I STORAGE  [initandlisten] WiredTiger message [1552753321:523789][1:0x7f9d46a64ca8], txn-recover: Set global recovery timestamp: 0
2019-03-16T16:22:01.562+0000 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
2019-03-16T16:22:01.623+0000 I CONTROL  [initandlisten] 
2019-03-16T16:22:01.623+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-03-16T16:22:01.623+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-03-16T16:22:01.623+0000 I CONTROL  [initandlisten] 
2019-03-16T16:22:01.623+0000 I CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.
2019-03-16T16:22:01.623+0000 I CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server. 
2019-03-16T16:22:01.623+0000 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP 
2019-03-16T16:22:01.623+0000 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2019-03-16T16:22:01.623+0000 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2019-03-16T16:22:01.623+0000 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2019-03-16T16:22:01.623+0000 I CONTROL  [initandlisten] 
2019-03-16T16:22:01.638+0000 I STORAGE  [initandlisten] createCollection: admin.system.version with provided UUID: 74fe0f10-e6a8-439c-9548-a2cdd18df3c7
2019-03-16T16:22:01.688+0000 I COMMAND  [initandlisten] setting featureCompatibilityVersion to 4.0
2019-03-16T16:22:01.700+0000 I STORAGE  [initandlisten] createCollection: local.startup_log with generated UUID: 0d6bdbd7-4b15-4ad1-8ded-fa28b89ae871
2019-03-16T16:22:01.762+0000 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2019-03-16T16:22:01.765+0000 I NETWORK  [initandlisten] waiting for connections on port 27017
2019-03-16T16:22:01.825+0000 I STORAGE  [LogicalSessionCacheRefresh] createCollection: config.system.sessions with generated UUID: b5462e15-4724-4b1f-8537-57d9ebb1a2e8
2019-03-16T16:22:01.902+0000 I INDEX    [LogicalSessionCacheRefresh] build index on: config.system.sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds: 1800 }
2019-03-16T16:22:01.902+0000 I INDEX    [LogicalSessionCacheRefresh]     building index using bulk method; build may temporarily use up to 500 megabytes of RAM
2019-03-16T16:22:01.905+0000 I INDEX    [LogicalSessionCacheRefresh] build index done.  scanned 0 total records. 0 secs
Run Code Online (Sandbox Code Playgroud)

Mos*_*ein 5

这部分docker-compose.yml意味着您希望将在端口27017上运行的容器公开给端口上的公共端口,5100以便任何人都可以通过本地主机或公共 ip 访问它,但是mongodb作为主机这个词只能在 docker 网络内的容器之间识别,所以如果您有同一网络中的另一个容器,它可以mongodb作为主机名和端口访问 mongodb27017

ports:
  - '5100:27017'
Run Code Online (Sandbox Code Playgroud)

根据 mongodb 日志,您遇到以下问题:

** WARNING: This server is bound to localhost. Remote systems will be unable to connect to this server. Start the server with --bind_ip <address> to specify which IP 
Run Code Online (Sandbox Code Playgroud)

所以你需要开始mongodb--bind_ip 0.0.0.0这样你就可以从容器外到达它。将您CMD的更改为以下内容:

CMD [ "mongod", "--bind_ip", "0.0.0.0" ]
Run Code Online (Sandbox Code Playgroud)

或者CMD从您的 Dockerfile 中删除,它将回退到与上面相同CMD的基础镜像的原始版本。

从 MongoDB 3.6 开始,mongod 默认绑定到 localhost。请参阅默认绑定到本地主机