Search code examples
mongodbdockerdocker-compose

when connecting docker container mongo from mongo-express, error: name does not resolve


when connecting docker container mongo from mongo-express, error: name does not resolve, I tried both command line and docker-compose, same result. In the end mongo-express did run but override my auth configuration.

here is my command line and docker-compose.yml

  docker run -d \
  -p 27017:27017 \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=password \
  --net mongo-network \
  --name mongodb \
  mongo
  docker run -d \
  -p 8081:8081 \
  -e ME_CONFIG_MONGODB_ADMINUSERNAME=admin \
  -e ME_CONFIG_MONGODB_ADMINPASSWORD=password \
  -e ME_CONFIG_MONGODB_SERVER=mongodb \
  --net mongo-network \
  --name mongo-express \
  mongo-express

docker-compose.yml

version: '3.8'

services:
  mongodb:
    image: mongo:latest
    container_name: mongodb
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: password
    networks:
      - mongo-network

  mongo-express:
    image: mongo-express
    container_name: mongo-express
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: admin
      ME_CONFIG_MONGODB_ADMINPASSWORD: password
      ME_CONFIG_MONGODB_SERVER: mongodb
    ports:
      - "8081:8081"
    networks:
      - mongo-network

networks:
  mongo-network:
    driver: bridge

Here is the logs for mongo-express:

Waiting for mongo:27017...
/docker-entrypoint.sh: line 15: mongo: Name does not resolve
/docker-entrypoint.sh: line 15: /dev/tcp/mongo/27017: Invalid argument
Mon Sep  2 05:59:42 UTC 2024 retrying to connect to mongo:27017 (2/10)
/docker-entrypoint.sh: line 15: mongo: Name does not resolve
/docker-entrypoint.sh: line 15: /dev/tcp/mongo/27017: Invalid argument
Mon Sep  2 05:59:43 UTC 2024 retrying to connect to mongo:27017 (3/10)
/docker-entrypoint.sh: line 15: mongo: Name does not resolve
/docker-entrypoint.sh: line 15: /dev/tcp/mongo/27017: Invalid argument
Mon Sep  2 05:59:44 UTC 2024 retrying to connect to mongo:27017 (4/10)
/docker-entrypoint.sh: line 15: mongo: Name does not resolve
/docker-entrypoint.sh: line 15: /dev/tcp/mongo/27017: Invalid argument
Mon Sep  2 05:59:45 UTC 2024 retrying to connect to mongo:27017 (5/10)
/docker-entrypoint.sh: line 15: mongo: Name does not resolve
/docker-entrypoint.sh: line 15: /dev/tcp/mongo/27017: Invalid argument
Mon Sep  2 05:59:46 UTC 2024 retrying to connect to mongo:27017 (6/10)
/docker-entrypoint.sh: line 15: mongo: Name does not resolve
/docker-entrypoint.sh: line 15: /dev/tcp/mongo/27017: Invalid argument
Mon Sep  2 05:59:47 UTC 2024 retrying to connect to mongo:27017 (7/10)
/docker-entrypoint.sh: line 15: mongo: Name does not resolve
/docker-entrypoint.sh: line 15: /dev/tcp/mongo/27017: Invalid argument
Mon Sep  2 05:59:48 UTC 2024 retrying to connect to mongo:27017 (8/10)
/docker-entrypoint.sh: line 15: mongo: Name does not resolve
/docker-entrypoint.sh: line 15: /dev/tcp/mongo/27017: Invalid argument
Mon Sep  2 05:59:49 UTC 2024 retrying to connect to mongo:27017 (9/10)
/docker-entrypoint.sh: line 15: mongo: Name does not resolve
/docker-entrypoint.sh: line 15: /dev/tcp/mongo/27017: Invalid argument
Mon Sep  2 05:59:50 UTC 2024 retrying to connect to mongo:27017 (10/10)
/docker-entrypoint.sh: line 15: mongo: Name does not resolve
/docker-entrypoint.sh: line 15: /dev/tcp/mongo/27017: Invalid argument
No custom config.js found, loading config.default.js
Welcome to mongo-express 1.0.2 



Mongo Express server listening at http://0.0.0.0:8081
Server is open to allow connections from anyone (0.0.0.0)
basicAuth credentials are "admin:pass", it is recommended you change this in your config.js!

It's actually overriding my config with default auth credential.

Below is running docker containers:

CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                    NAMES
140166b91b1e   mongo:latest    "docker-entrypoint.s…"   20 minutes ago   Up 20 minutes   27017/tcp                mongodb
8f4560a378e9   mongo-express   "/sbin/tini -- /dock…"   20 minutes ago   Up 20 minutes   0.0.0.0:8081->8081/tcp   mongo-express

Network inspect: when running from docker-compose, It seems neither one is running in mongo-network, the mongo-network container is empty.

[
    {
        "Name": "mongo-network",
        "Id": "570316b27c9ab2c7b2754bf24d2b3aef55d0f6d6e34dd24eafa13f967f36fb1a",
        "Created": "2024-09-02T00:35:00.924602966Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
When running from command line, both are in mongo-network with different IP address.
[
    {
        "Name": "mongo-network",
        "Id": "570316b27c9ab2c7b2754bf24d2b3aef55d0f6d6e34dd24eafa13f967f36fb1a",
        "Created": "2024-09-02T00:35:00.924602966Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "ac0dddac98e156f3e80c654e3af8a08ebd1650895b6a776837f744fdb0f92eb2": {
                "Name": "mongodb",
                "EndpointID": "35fea4556b3b9baa7a7648d0a5c1e7eef4e2c1f8c279cbd93478bb0c1504063d",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "d909f70b33fb0b26d4e15b1767c0c281e4989cc10fb831c0c9baba3ebc01e63d": {
                "Name": "mongo-express",
                "EndpointID": "63890afb86f6c66d95c3059509e9441a1418a81177949714e25f5fbcadad8053",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

I tried restarting docker but nothing changes.


Solution

  • According to this link, you are using deprecated environment variables for mongo-express. docker-compose.yaml should be this:

    services:
      mongodb:
        image: mongo:latest
        container_name: mongodb
        environment:
          MONGO_INITDB_ROOT_USERNAME: admin
          MONGO_INITDB_ROOT_PASSWORD: password
        networks:
          - mongo-network
    
      mongo-express:
        image: mongo-express
        container_name: mongo-express
        environment:
          ME_CONFIG_MONGODB_URL: 'mongodb://admin:password@mongodb:27017'
          ME_CONFIG_BASICAUTH: false
        ports:
          - "8081:8081"
        networks:
          - mongo-network
    
    networks:
      mongo-network:
        driver: bridge
    

    In this exapmle I disabled basic auth for mongo-express web dashboard, If you want to enable basic auth add these two variables:

    ME_CONFIG_BASICAUTH_USERNAME: root
    ME_CONFIG_BASICAUTH_PASSWORD: pass