Проблема с подключением службы mongo express в докере

У меня есть конфигурация докера, в которой я запускал сервер nginx. Теперь мне нужно запустить mongo и mongo-express, чтобы иметь возможность подключиться к моей базе данных. Когда я помещаю свою конфигурацию для этих двух в docker-compose.yml и пытаюсь составить docker, запускается служба mongo, но mongo express показывает эту ошибку

      Could not connect to database using connectionString: mongodb://root:pass@mongodb:27017/" mongo-express_1 | (node:8) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [mongodb:27017] on first connect

Любая помощь приветствуется, вот мои конфигурации.

docker-compose.yml

      version: "3"

services:
app:
  build:
    context: .
    dockerfile: Dockerfile
  image: cryptoterminal
  container_name: app
  restart: unless-stopped
  volumes:
    - ./:/var/www

webserver:
  build:
    context: .
    dockerfile: Dockerfile_Nginx
  image: nginx
  container_name: webserver
  restart: unless-stopped
  ports:
    - "8080:80"
  volumes: 
    - ./:/var/www
    - ./config/nginx/:/etc/nginx/conf.d/
  depends_on:
    - app
mongo:
  image: mongo
  environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=pass
mongo-express:
  image: mongo-express
  environment:
    - ME_CONFIG_MONGODB_SERVER=mongodb
    - ME_CONFIG_MONGODB_ENABLE_ADMIN=true
    - ME_CONFIG_MONGODB_ADMINUSERNAME=root
    - ME_CONFIG_MONGODB_ADMINPASSWORD=pass
    - ME_CONFIG_BASICAUTH_USERNAME=admin
    - ME_CONFIG_BASICAUTH_PASSWORD=admin123
  depends_on:
      - mongo
  ports:
    - "8888:8081"

Dockerfile

      FROM php:7.4-fpm-alpine

WORKDIR /var/www

RUN apk update && apk add \

build-base \
vim

RUN addgroup -g 1000 -S www && \
adduser -u 1000 -S www -G www

USER www

COPY --chown=www:www . /var/www

EXPOSE 9000

Dockerfile_Nginx

      FROM nginx:alpine

COPY ./config/nginx/app.conf /etc/nginx/conf.d/app.conf

COPY . /var/www

.env файл

      MONGO_DB_URI=mongodb://root:pass@mongodb:27017/crypto-terminal?authSource=admin

файл app.conf

      server {
    listen 80;
    index index.php index.html;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
}

структура папок

      project_folder
    php
        config
            nginx
                app.conf
    .env
    Dockerfile
    Dockerfile_Nginx
    docker-compose.yml
    index.php

3 ответа

Решение

В вашем файле docker-compose вы вызываете службу mongo mongo. Это имя, которое вы можете адресовать ему, как в сети докеров. В строке подключения вы сказали

      mongodb://root:pass@mongodb:27017/"

Так должно быть

      mongodb://root:pass@mongo:27017/"

Поскольку строка подключения создается с использованием переменных среды в вашем файле docker-compose, необходимо изменить следующее:

      - ME_CONFIG_MONGODB_SERVER=mongodb

к

      - ME_CONFIG_MONGODB_SERVER=mongo

К сожалению, ни одно из решений мне не помогло. В конце концов мне удалось решить все проблемы с файлом компоновки и переменными среды, показанными ниже:

./docker-compose.yml

      version: '3'

services:
  mongo-express:
    image: mongo-express
    ports:
      - 8081:8081
    env_file:
      - .env
    links:
      - mongo-db
    networks:
      - mongo-compose-network
    restart: always
    depends_on:
      - mongo-db

  mongo-db:
    image: mongo:latest
    container_name: mongo
    env_file:
      - .env
    ports:
      - "27017:27017"
    volumes:
      - mongodb_data_container:/data/db
    networks:
      - mongo-compose-network


networks:
    mongo-compose-network:
      driver: bridge

volumes:
  mongodb_data_container:

./.env

      ME_CONFIG_MONGODB_SERVER=mongo-db
ME_CONFIG_BASICAUTH_USERNAME=hacku
ME_CONFIG_BASICAUTH_PASSWORD=Yalcin-1
ME_CONFIG_MONGODB_PORT=27017
ME_CONFIG_MONGODB_ADMINUSERNAME=root
ME_CONFIG_MONGODB_ADMINPASSWORD=rootpassword
MONGO_INITDB_DATABASE=demodb
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=rootpassword

Надеюсь, это поможет!

       enter code here

# Use root/example as user/password credentials
version: '3.1'

services:`enter code here`

  mongodb:
    image: mongo
    restart: always
    container_name: mongodb
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: root
    volumes:
      - mongodb:/data/db:rw
      - mongoconfig:/data/configdb:rw
    networks:
      - mongodb
      
  mongo-express:
    image: mongo-express
    restart: always
    container_name: mongo-express
    ports:
      - 8889:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: root
      ME_CONFIG_MONGODB_SERVER: mongodb
    depends_on:
      - mongodb
    links:
      - mongodb:mongodb
    networks:
      - mongodb
      
volumes:
  mongodb:
    name: mongodb
    driver: local
    external: false
  mongoconfig:
    name: mongoconfig
    driver: local
    external: false
    
networks:
  mongodb:
    name: mongodb
    driver: bridge
    

# docker exec -it mongodb /bin/bash
# mongo -u root -p
# localhost:8889
Другие вопросы по тегам