mongo icon indicating copy to clipboard operation
mongo copied to clipboard

mongo in the container does not properly listen on IPv6

Open zajdee opened this issue 1 year ago • 1 comments

Hi everyone,

I have encountered a bug where the official Mongo image does not properly enable MongoDB to listen on IPv6 address(es).

I have tried two cases:

  • default setting (docker-entrypoint.sh sets "--bind-all")
  • manual override of the start-up arguments to use --bind_ip::,0.0.0.0

In both cases Mongo listens on just 0.0.0.0:27017. Connections from other containers in a docker-compose built environment may result in connection issues (if the app only tries IPv6 and does not fall back to IPv4).

I had to add the command: mongod --auth --ipv6 --bind_ip ::,0.0.0.0 line to my docker-compose.yaml to get this working.

Proposal:

  • the --ipv6 argument should be always added as part of the docker-entrypoint.sh when the bind-all argument is added by the docker-entrypoint.sh and the container is IPv6-enabled
  • the --ipv6 argument should be always added as part of the docker-entrypoint.sh when the bind_ip argument contains an IPv6 address.

Thank you for looking into this issue.

Environment:

  1. Dual-stacked (IPv4+IPv6) Docker network
  2. Default latest mongo image
# docker image inspect mongo
[
    {
        "Id": "sha256:6cce01a3be94671985ff01c97275ad73fcf6968736e662951cf7cc7045589ceb",
        "RepoTags": [
            "mongo:latest"
        ],
        "RepoDigests": [
            "mongo@sha256:0907ce5de8b9aee1935e43fb6e20f80297a08c90de71c0c2b44f9b3ecc9d4906"
        ],
        "Parent": "",
        "Comment": "buildkit.dockerfile.v0",
        "Created": "2024-04-03T16:02:10Z",
        "DockerVersion": "",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "27017/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.17",
                "JSYAML_VERSION=3.13.1",
                "MONGO_PACKAGE=mongodb-org",
                "MONGO_REPO=repo.mongodb.org",
                "MONGO_MAJOR=7.0",
                "MONGO_VERSION=7.0.8",
                "HOME=/data/db"
            ],
            "Cmd": [
                "mongod"
            ],
            "ArgsEscaped": true,
            "Image": "",
            "Volumes": {
                "/data/configdb": {},
                "/data/db": {}
            },
            "WorkingDir": "",
            "Entrypoint": [
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "org.opencontainers.image.ref.name": "ubuntu",
                "org.opencontainers.image.version": "22.04"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 794785163,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/587aab40c47b7be6ed1c8138ca70deae5619efab3010fefbfb8dcea45aefa05f/diff:/var/lib/docker/overlay2/1e55ae391eadf8c5e24ecb5dfc6026d763479493e07ea2ce29a9e7a3d329d94a/diff:/var/lib/docker/overlay2/fe5d0b62ebc7a4f896998a6a23138ff4d22bda65a2c8b33b7254e5b879820556/diff:/var/lib/docker/overlay2/9c433ec3a3898756e33220498e8249f4bedbdcd2391bd1f41c2c949267807e3a/diff:/var/lib/docker/overlay2/47cf7e16c58d8e9bda9bbedef09f2b17b3be41c36b7373fac98ca12321f9b507/diff:/var/lib/docker/overlay2/195b8e05cbbd66f23fface9c84d0a62c10f3a84f6f7b73b5d16ae76b5d430644/diff:/var/lib/docker/overlay2/a57a811ae6669f5c774715bdc32cdcee51af51bc88e423746b6cf60e00e51fa9/diff",
                "MergedDir": "/var/lib/docker/overlay2/c92d8dc73e1f5be737f9769c4012925b38e908806bec875918d15da20ad770d6/merged",
                "UpperDir": "/var/lib/docker/overlay2/c92d8dc73e1f5be737f9769c4012925b38e908806bec875918d15da20ad770d6/diff",
                "WorkDir": "/var/lib/docker/overlay2/c92d8dc73e1f5be737f9769c4012925b38e908806bec875918d15da20ad770d6/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:b706c187b212a5c2242e664f21d3eb12fee4c1e150b300d12035284d53c56b7a",
                "sha256:2bda7597f9322f01c94509c4e81d6a7a1809f2022f9bc443397249851b9654ca",
                "sha256:1b3d7e280970c1e34ae77e6bad2887f80bbbe80e5b848e99f637fda900eef2b1",
                "sha256:9d0d44963fda36c34da91c736dd59d84e0e17b4da43fcee0fc04c5e5d3697015",
                "sha256:daac870a250b21439f2b9f739f2b64f4fe7c40c699d2305ab3704cbd9bb5b128",
                "sha256:1a10a0799170e7c12b45ae2637a889d01a819e88ad4c922fa41929416504e6c7",
                "sha256:fcb1ba1bd1076dc455da7f10172e2e8196252fcd89d4f71181bbbb23ed394cfa",
                "sha256:6e81c9c7f811ebd0a5610932feacf4b0b2903ba3187e1eb74f54211df969ccb2"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

zajdee avatar May 05 '24 08:05 zajdee

I am unsure if this should be added to the entrypoint; it already has too many magic features and we are hesitant to add more.

docker run ... mongo --ipv6 is enough to get it working (mongod in the command is assumed if just flags are sent to the entrypoint script). So command: --ipv6 would be the same in compose.yml.

yosifkit avatar May 06 '25 23:05 yosifkit