簡體   English   中英

Docker-compose Nodejs Mongodb 不成功

[英]Docker-compose Nodejs Mongodb doesn't success

我正在使用docker-compose在本地 Mac OS 上測試NodeJS + MongoDB ,但NodeJSMongoDB無法成功連接。


如果我沒有通過以下代碼為MongoDB設置--auth ,一切正常。

這是代碼:

貓鼬連接

mongodb://mongodb:27017/myprojectdatabase

docker-compose.yml

version: "3"
services:
  web:
    build: .
    restart: always
    ports:
    - "8080:8080"
    depends_on:
    - mongodb
    volumes:
     - .:/mycode
  mongodb:
    image: mongo:latest
    ports:
      - "27017:27017"

然后我想像下面--auth為 MongoDB 啟動--auth ,我遇到了錯誤。

docker-compose.yml

version: "3"
services:
  web:
    build: .
    restart: always
    ports:
    - "8080:8080"
    depends_on:
    - mongodb
    volumes:
     - .:/mycode
    # environment:
    #  - NODE_ENV=production
  mongodb:
    image: mongo:latest
    command: [--auth]
    environment:
      MONGO_INITDB_ROOT_USERNAME: my_admin
      MONGO_INITDB_ROOT_PASSWORD: my2019
      MONGO_INITDB_DATABASE: myprojectdatabase
    ports:
      - "27017:27017"
    volumes:
      - ./mydata:/data/db

然后我跑

docker-compose down -v && docker-compose up --build 

我得到了輸出:

mongodb_1  | 2019-03-01T10:54:09.847+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
mongodb_1  | 2019-03-01T10:54:09.869+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=9554854909b1
mongodb_1  | 2019-03-01T10:54:09.869+0000 I CONTROL  [initandlisten] db version v4.0.4
mongodb_1  | 2019-03-01T10:54:09.869+0000 I CONTROL  [initandlisten] git version: f288a3bdf201007f3693c58e140056adf8b04839
mongodb_1  | 2019-03-01T10:54:09.869+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
mongodb_1  | 2019-03-01T10:54:09.869+0000 I CONTROL  [initandlisten] allocator: tcmalloc
mongodb_1  | 2019-03-01T10:54:09.869+0000 I CONTROL  [initandlisten] modules: none
mongodb_1  | 2019-03-01T10:54:09.869+0000 I CONTROL  [initandlisten] build environment:
mongodb_1  | 2019-03-01T10:54:09.869+0000 I CONTROL  [initandlisten]     distmod: ubuntu1604
mongodb_1  | 2019-03-01T10:54:09.869+0000 I CONTROL  [initandlisten]     distarch: x86_64
mongodb_1  | 2019-03-01T10:54:09.869+0000 I CONTROL  [initandlisten]     target_arch: x86_64
mongodb_1  | 2019-03-01T10:54:09.869+0000 I CONTROL  [initandlisten] options: { net: { bindIpAll: true }, security: { authorization: "enabled" } }
mongodb_1  | 2019-03-01T10:54:09.873+0000 W STORAGE  [initandlisten] Detected unclean shutdown - /data/db/mongod.lock is not empty.
mongodb_1  | 2019-03-01T10:54:09.876+0000 I STORAGE  [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
mongodb_1  | 2019-03-01T10:54:09.878+0000 W STORAGE  [initandlisten] Recovering data from the last clean checkpoint.
mongodb_1  | 2019-03-01T10:54:09.879+0000 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=487M,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),    
web_1      | connection error: { MongoNetworkError: failed to connect to server [mongodb:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 192.168.160.2:27017]
    web_1      |     at Pool.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/topologies/server.js:505:11)
    web_1      |     at emitOne (events.js:116:13)

有時我可以看到日志包含用戶創建的信息,有時則不是。

 2019-03-01T10:38:50.323+0000 I STORAGE  [conn2] createCollection: admin.system.users with generated UUID: 6b3b88f9-e77c-4094-a1c7-153816202a9e
mongodb_1  | Successfully added user: {
mongodb_1  |    "user" : "my_admin",
mongodb_1  |    "roles" : [
mongodb_1  |        {
mongodb_1  |            "role" : "root",
mongodb_1  |            "db" : "admin"
mongodb_1  |        }
mongodb_1  |    ]
mongodb_1  | }
mongodb_1  | 2019-03-01T10:38:50.340+0000 E -        [main] Error saving history file: FileOpenFailed: Unable to open() file /home/mongodb/.dbshell: Unknown error

我是碼頭工人的新手。 我想主要問題是web無法與mongodb建立連接。 在這個問題上花費太長時間。

有什么幫助嗎? 謝謝!

確保您不會訪問 Web 容器的 localhost。 將容器視為單獨的機器:一個容器中的 localhost 不與另一個容器共享。 這就是為什么在連接字符串中有mongodb:27017而不是localhost:27017原因,因為默認 docker 網絡中的mongodb是帶有 mongo 的容器的 DNS 名稱。 您在第一個(成功)案例中使用此連接字符串,請確保在第二個案例中有一個有效的 DNS 名稱。

並且還要確保在連接字符串中也包含您的數據庫憑據(用戶名:密碼)。

暫無
暫無

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

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