Docker化MongoDB无法从宿主机登录,仅容器内可访问求助
Hey there! I’ve been where you are—frustrated when a containerized service won’t play nice with external connections. Let’s break down the issues and fix this step by step.
1. Fix the Port Binding in Your Docker Run Command
The first problem is your port mapping: -p 127.0.0.1:27019:27019. By specifying 127.0.0.1, you’re telling Docker to only expose the port on the host’s local loopback interface. That means only processes running directly on the host can connect, not other machines (or even the host using its LAN/public IP).
Change that part to bind to all available host interfaces instead:-p 0.0.0.0:27019:27019
2. Ensure MongoDB Listens on All Container Interfaces
While the official MongoDB Docker image usually listens on 0.0.0.0 by default, it’s safe to explicitly set this to avoid any defaults that might restrict access. Add the --bind_ip 0.0.0.0 flag to your startup command.
Updated Full Command
docker run --name mongo_test -v /db/mongo/test:/data/db -p 0.0.0.0:27019:27019 -d mongo --auth --port 27019 --bind_ip 0.0.0.0
3. Verify Network Connectivity & Firewall Rules
- On the Host Machine: Test the connection using
mongosh(ormongoif you’re using an older version) with your auth credentials:mongosh mongodb://<your_username>:<your_password>@localhost:27019 - From Another Machine: Use your host’s LAN or public IP instead of
localhost:mongosh mongodb://<your_username>:<your_password>@<host_machine_ip>:27019 - Check Firewall: Make sure your host’s firewall allows incoming traffic on port 27019. For example, on Ubuntu with UFW:
sudo ufw allow 27019/tcp
4. Confirm Your MongoDB User’s Access Permissions
If you still can’t connect, double-check the user you created in MongoDB. By default, some user setups restrict connections to localhost only. When creating your user, ensure the host field is set to % (allows all hosts) or a specific IP range you want to grant access to.
Example user creation command (run inside the container via docker exec -it mongo_test mongosh admin):
use admin db.createUser({ user: "admin_user", pwd: "your_secure_password", roles: ["root"], authenticationRestrictions: [{ clientSource: ["0.0.0.0/0"] }] // Allows any IP to connect })
Once you’ve made these changes, restart the container (if you didn’t run the updated command directly) with docker restart mongo_test and test the connection again.
内容的提问来源于stack exchange,提问作者Piet Ed

