Проблемы Docker | DJango | MongoDB

#mongodb #docker

Вопрос:

Я не разработчик по профессии, но мне нравится Гуглить, и в большинстве случаев мне это удается. На этот раз я сдался после нескольких недель попыток. Я пытаюсь создать и запустить приложение docker, но оно просто отказывается это делать, а его разработчика с нами нет.

докер-compose.yml

 version: "3.9"
services:
  web_app:
    build:
      context: ./
      dockerfile: web_app/Dockerfile
    ports:
      - "8000:8000"
    volumes:
      - ./web_app:/app
    command: sh -c "python manage.py runserver 0.0.0.0:8000"
    environment: 
      - DEBUG=1
      - DATABASE=mongo
      - MONGO_CREDS=${MONGO_CREDS}
    volumes:
      - ./data:/data/
  queuing:
    build:
      context: ./
      dockerfile: Queuing/Dockerfile
    environment:
      - DATABASE=mongo
      - MONGO_CREDS=${MONGO_CREDS}
    restart: always
  checking:
    build:
      context: ./
      dockerfile: Checking/Dockerfile
    environment:
      - DATABASE=mongo
      - MONGO_CREDS=${MONGO_CREDS}
    restart: always
  fetching:
    build:
      context: ./
      dockerfile: Fetching/Dockerfile
    environment:
      - DATABASE=mongo
      - MONGO_CREDS=${MONGO_CREDS}
    restart: always
    volumes:
      - ./data:/data/
  exporting:
    build:
      context: ./
      dockerfile: Exporting/Dockerfile
    environment:
      - DATABASE=mongo
      - MONGO_CREDS=${MONGO_CREDS}
    restart: always
    
    volumes:
      - ./data:/data/
 

докер-сервисы.yml

 version: "3.9"
services:
  mongo:
    image: mongo
    restart: always
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: <ENTER PASSWORD HERE>
    volumes:
      - mongo-db:/data/db


  express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: admin
      ME_CONFIG_MONGODB_ADMINPASSWORD: <ENTER PASSWORD HERE>
    depends_on:
      - mongo

volumes:
  mongo-db:
 

Я создаю и запускаю докер, никаких проблем, никаких ошибок.

 docker-compose -f docker-services.yml  up -d --build
docker-compose up -d --build
 

Также,

 root@ubuntu:/home/vikas/Desktop/MTR/Test# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                           NAMES
5c9c7c2e6dc7   test_checking    "python -u /app/app.…"   37 minutes ago   Up 37 minutes                                                   test_checking_1
0a8ea2ee9c8c   test_web_app     "sh -c 'python manag…"   37 minutes ago   Up 37 minutes   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp       test_web_app_1
d97509b73813   test_fetching    "python -u /app/app.…"   37 minutes ago   Up 37 minutes                                                   test_fetching_1
a1d3204b4243   test_exporting   "python -u /app/app.…"   37 minutes ago   Up 37 minutes                                                   test_exporting_1
ff9bdb9943a2   test_queuing     "python -u /app/app.…"   37 minutes ago   Up 37 minutes                                                   test_queuing_1
d5c27de9ec9d   mongo-express    "tini -- /docker-ent…"   38 minutes ago   Up 37 minutes   0.0.0.0:8081->8081/tcp, :::8081->8081/tcp       test_express_1
89da15468de5   mongo            "docker-entrypoint.s…"   38 minutes ago   Up 38 minutes   0.0.0.0:27017->27017/tcp, :::27017->27017/tcp   test_mongo_1
 

Но есть ошибка, которую я не могу устранить,

 #docker logs d5c27de9ec9d -f
    Welcome to mongo-express
    ------------------------
(node:9) [MONGODB DRIVER] Warning: Current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
    **Could not connect to database using connectionString: mongodb://mongo:27017"**
    (node:9) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [mongo:27017] on first connect [Error: connect ECONNREFUSED 172.18.0.2:27017
        at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1144:16) {
      name: 'MongoNetworkError'
 

Я даже проверил подключение,

 root@ubuntu:/home/vikas/Desktop/MTR/Backup# mongo -host 127.0.0.1:27017 admin -u admin -p admin
MongoDB shell version v3.6.8
connecting to: mongodb://127.0.0.1:27017/admin
Implicit session: session { "id" : UUID("05b23477-2dfa-447d-9bae-9f2a106c7046") }
MongoDB server version: 5.0.3
WARNING: shell and server versions do not match
Server has startup warnings: 
{"t":{"$date":"2021-10-19T09:57:06.221 00:00"},"s":"I",  "c":"STORAGE",  "id":22297,   "ctx":"initandlisten","msg":"Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem","tags":["startupWarnings"]}

> show dbs 
admin             0.000GB 
config            0.000GB 
local             0.000GB 
mtr-bulk-ld-tool  0.000GB
 

Любые советы будут оценены по достоинству.

Комментарии:

1. Если вы подождете 30-60 секунд и запустите docker-compose -f docker-services.yml up -d снова, сработает ли это во второй раз? ( depends_on: в основном проверяет, существует ли другой контейнер, но не обязательно, что его служба полностью запущена и запущена.)

2. Спасибо, что нашел время ответить, Дэвид. Это был хороший совет! К сожалению, я попытался это сделать, но безрезультатно. Что меня раздражает, так это то, что я не знаю, как и где искать. Я делаю DF/IR, и это совершенно вне моей зоны комфорта.

3. Похоже, что имя хоста mongo будет решено 172.18.0.2:27017 . Является ли этот IP-адрес правильным для подключения?