Không thể kết nối mongodb trong docker

Câu trả lời thực sự được cung cấp trong nhận xét đầu tiên (và nó đã giải quyết cho tôi cùng một vấn đề), nhưng sẽ dễ dàng tìm thấy nó hơn khi nó nằm trong phần Trả lời

Câu trả lời sẽ cho rằng bạn đang sử dụng Docker Toolbox


Thay vì chạy

docker run --name mongo2 -p 127.0.0.1:27017:27017 mongo

lệnh sau sẽ được chạy

docker run --name mongo2 -p :27017:27017 mongo

Để có được máy ảo

HOSTIP="192.168.1.100"
PORT="62514"

set -e

CONTAINERID=$(sudo docker run -d ubuntu:14.04 /bin/bash -c "\
sed -i -e 's/# deb/deb/g' /etc/apt/sources.list; \
cat /etc/apt/sources.list; \
apt-get update; \
apt-get install --yes --force-yes git python-minimal; \
git clone https://github.com/mpv-player/mpv-build.git; \
cd mpv-build/; \
./update; \
apt-get install --yes --force-yes devscripts equivs; \
rm -f mpv-build-deps_*_*.deb; \
mk-build-deps -i -t \"apt-get --yes --force-yes --no-install-recommends\"; \
./build -j\$(nproc); \
echo \"From container: done building!\" | nc $HOSTIP $PORT; \
nc -v -l $PORT")

CONTAINERIP=$(sudo docker inspect $CONTAINERID|grep IPAddress|sed 's/.*IPAddress": "//'|sed 's/",$//')

echo "Started mpv-build container with Docker container ID: $CONTAINERID and IP: $CONTAINERIP" 
echo "Waiting to hear from container that the build has finished..."

#listen on host. wait for container to connect and disconnect
nc -l $PORT

#copy file from running container, while it's listening for a connection with nc
sudo docker cp $CONTAINERID:/mpv-build/mpv/build/mpv ./

#connect to the listening socket in the container to make the container finish running
echo "bye" | nc  $CONTAINERIP $PORT

echo "Done"
0

  1. Truy cập VirtualBox -> chọn VM "mặc định" -> nhấp vào nút "Hiển thị"
  2. Chạy lệnh.
    HOSTIP="192.168.1.100"
    PORT="62514"
    
    set -e
    
    CONTAINERID=$(sudo docker run -d ubuntu:14.04 /bin/bash -c "\
    sed -i -e 's/# deb/deb/g' /etc/apt/sources.list; \
    cat /etc/apt/sources.list; \
    apt-get update; \
    apt-get install --yes --force-yes git python-minimal; \
    git clone https://github.com/mpv-player/mpv-build.git; \
    cd mpv-build/; \
    ./update; \
    apt-get install --yes --force-yes devscripts equivs; \
    rm -f mpv-build-deps_*_*.deb; \
    mk-build-deps -i -t \"apt-get --yes --force-yes --no-install-recommends\"; \
    ./build -j\$(nproc); \
    echo \"From container: done building!\" | nc $HOSTIP $PORT; \
    nc -v -l $PORT")
    
    CONTAINERIP=$(sudo docker inspect $CONTAINERID|grep IPAddress|sed 's/.*IPAddress": "//'|sed 's/",$//')
    
    echo "Started mpv-build container with Docker container ID: $CONTAINERID and IP: $CONTAINERIP" 
    echo "Waiting to hear from container that the build has finished..."
    
    #listen on host. wait for container to connect and disconnect
    nc -l $PORT
    
    #copy file from running container, while it's listening for a connection with nc
    sudo docker cp $CONTAINERID:/mpv-build/mpv/build/mpv ./
    
    #connect to the listening socket in the container to make the container finish running
    echo "bye" | nc  $CONTAINERIP $PORT
    
    echo "Done"
    
    1
  3. IP của VM sẽ ở đầu ra

Giải pháp liên quan

Docker – Gửi tệp từ bộ chứa Docker đến máy chủ lưu trữ bằng nc. Tại sao máy chủ nc đóng kết nối quá sớm

Sử dụng lệnh

HOSTIP="192.168.1.100"
PORT="62514"

set -e

CONTAINERID=$(sudo docker run -d ubuntu:14.04 /bin/bash -c "\
sed -i -e 's/# deb/deb/g' /etc/apt/sources.list; \
cat /etc/apt/sources.list; \
apt-get update; \
apt-get install --yes --force-yes git python-minimal; \
git clone https://github.com/mpv-player/mpv-build.git; \
cd mpv-build/; \
./update; \
apt-get install --yes --force-yes devscripts equivs; \
rm -f mpv-build-deps_*_*.deb; \
mk-build-deps -i -t \"apt-get --yes --force-yes --no-install-recommends\"; \
./build -j\$(nproc); \
echo \"From container: done building!\" | nc $HOSTIP $PORT; \
nc -v -l $PORT")

CONTAINERIP=$(sudo docker inspect $CONTAINERID|grep IPAddress|sed 's/.*IPAddress": "//'|sed 's/",$//')

echo "Started mpv-build container with Docker container ID: $CONTAINERID and IP: $CONTAINERIP" 
echo "Waiting to hear from container that the build has finished..."

#listen on host. wait for container to connect and disconnect
nc -l $PORT

#copy file from running container, while it's listening for a connection with nc
sudo docker cp $CONTAINERID:/mpv-build/mpv/build/mpv ./

#connect to the listening socket in the container to make the container finish running
echo "bye" | nc  $CONTAINERIP $PORT

echo "Done"
2, tập lệnh có thể được viết lại như vậy

HOSTIP="192.168.1.100"
PORT="62514"

set -e

CONTAINERID=$(sudo docker run -d ubuntu:14.04 /bin/bash -c "\
sed -i -e 's/# deb/deb/g' /etc/apt/sources.list; \
cat /etc/apt/sources.list; \
apt-get update; \
apt-get install --yes --force-yes git python-minimal; \
git clone https://github.com/mpv-player/mpv-build.git; \
cd mpv-build/; \
./update; \
apt-get install --yes --force-yes devscripts equivs; \
rm -f mpv-build-deps_*_*.deb; \
mk-build-deps -i -t \"apt-get --yes --force-yes --no-install-recommends\"; \
./build -j\$(nproc); \
echo \"From container: done building!\" | nc $HOSTIP $PORT; \
nc -v -l $PORT")

CONTAINERIP=$(sudo docker inspect $CONTAINERID|grep IPAddress|sed 's/.*IPAddress": "//'|sed 's/",$//')

echo "Started mpv-build container with Docker container ID: $CONTAINERID and IP: $CONTAINERIP" 
echo "Waiting to hear from container that the build has finished..."

#listen on host. wait for container to connect and disconnect
nc -l $PORT

#copy file from running container, while it's listening for a connection with nc
sudo docker cp $CONTAINERID:/mpv-build/mpv/build/mpv ./

#connect to the listening socket in the container to make the container finish running
echo "bye" | nc  $CONTAINERIP $PORT

echo "Done"

netcat hiện chỉ được sử dụng như một loại cơ chế nhắn tin, để bộ chứa báo hiệu cho máy chủ khi nó được xây dựng xong (để máy chủ có thể bắt đầu sao chép) và để máy chủ báo hiệu cho bộ chứa rằng nó đã sao chép tệp xong (

Debian – Kết nối với Mongodb Bi-connector từ xa trong docker

Được rồi, tôi đã tìm ra vấn đề. Bây giờ nó hoạt động như một nét duyên dáng

Hóa ra khi ở trong một vùng chứa, tệp thực thi mongodrdl cần tùy chọn --addr được đặt với tên máy chủ lưu trữ của vùng chứa làm tên vùng chứa (không hoạt động với localhost hoặc 127. 0. 0. 1) Như thế này

/usr/local/bin/mongosqld --addr mongo-bi-connector. 3307 --schema giản đồ. drdl --mongo-uri $MONGO_URI

Tôi đã xuất bản nguồn của mình trên github và hình ảnh docker trên trung tâm docker

https. //github. com/emmanuelvisage/docker-mongo-bi-connector https. // trung tâm. người đóng tàu. com/r/visage/mongodb-bi-connector/

Docker container chạy trong một môi trường biệt lập bao gồm các mạng ảo riêng biệt theo mặc định. Mặc dù bạn có thể chạy MongoDB của mình trong vùng chứa được kết nối với mạng ảo như vậy, nhưng. g. bằng cách sử dụng docker-compose, có thể có những trường hợp bạn muốn sử dụng một phiên bản MongoDB cục bộ và kết nối với nó từ một vùng chứa

Mục lục

Mạng cầu Docker

Để thiết lập kết nối mạng giữa máy chủ và vùng chứa, có thể sử dụng mạng cầu nối Docker. Một tiêu chuẩn có tên là

HOSTIP="192.168.1.100"
PORT="62514"

set -e

CONTAINERID=$(sudo docker run -d ubuntu:14.04 /bin/bash -c "\
sed -i -e 's/# deb/deb/g' /etc/apt/sources.list; \
cat /etc/apt/sources.list; \
apt-get update; \
apt-get install --yes --force-yes git python-minimal; \
git clone https://github.com/mpv-player/mpv-build.git; \
cd mpv-build/; \
./update; \
apt-get install --yes --force-yes devscripts equivs; \
rm -f mpv-build-deps_*_*.deb; \
mk-build-deps -i -t \"apt-get --yes --force-yes --no-install-recommends\"; \
./build -j\$(nproc); \
echo \"From container: done building!\" | nc $HOSTIP $PORT; \
nc -v -l $PORT")

CONTAINERIP=$(sudo docker inspect $CONTAINERID|grep IPAddress|sed 's/.*IPAddress": "//'|sed 's/",$//')

echo "Started mpv-build container with Docker container ID: $CONTAINERID and IP: $CONTAINERIP" 
echo "Waiting to hear from container that the build has finished..."

#listen on host. wait for container to connect and disconnect
nc -l $PORT

#copy file from running container, while it's listening for a connection with nc
sudo docker cp $CONTAINERID:/mpv-build/mpv/build/mpv ./

#connect to the listening socket in the container to make the container finish running
echo "bye" | nc  $CONTAINERIP $PORT

echo "Done"
3 luôn hiện diện và được tạo theo mặc định. Bạn có thể kiểm tra nó bằng lệnh
HOSTIP="192.168.1.100"
PORT="62514"

set -e

CONTAINERID=$(sudo docker run -d ubuntu:14.04 /bin/bash -c "\
sed -i -e 's/# deb/deb/g' /etc/apt/sources.list; \
cat /etc/apt/sources.list; \
apt-get update; \
apt-get install --yes --force-yes git python-minimal; \
git clone https://github.com/mpv-player/mpv-build.git; \
cd mpv-build/; \
./update; \
apt-get install --yes --force-yes devscripts equivs; \
rm -f mpv-build-deps_*_*.deb; \
mk-build-deps -i -t \"apt-get --yes --force-yes --no-install-recommends\"; \
./build -j\$(nproc); \
echo \"From container: done building!\" | nc $HOSTIP $PORT; \
nc -v -l $PORT")

CONTAINERIP=$(sudo docker inspect $CONTAINERID|grep IPAddress|sed 's/.*IPAddress": "//'|sed 's/",$//')

echo "Started mpv-build container with Docker container ID: $CONTAINERID and IP: $CONTAINERIP" 
echo "Waiting to hear from container that the build has finished..."

#listen on host. wait for container to connect and disconnect
nc -l $PORT

#copy file from running container, while it's listening for a connection with nc
sudo docker cp $CONTAINERID:/mpv-build/mpv/build/mpv ./

#connect to the listening socket in the container to make the container finish running
echo "bye" | nc  $CONTAINERIP $PORT

echo "Done"
4

$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "73cb0c87fb64f19c76e3367e80b2da2d104a67603882ca539ce2cf70bdf97c4f",
        "Created": "2022-01-14T20:53:38.577610832+01:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

Lưu ý rằng mạng này có một

HOSTIP="192.168.1.100"
PORT="62514"

set -e

CONTAINERID=$(sudo docker run -d ubuntu:14.04 /bin/bash -c "\
sed -i -e 's/# deb/deb/g' /etc/apt/sources.list; \
cat /etc/apt/sources.list; \
apt-get update; \
apt-get install --yes --force-yes git python-minimal; \
git clone https://github.com/mpv-player/mpv-build.git; \
cd mpv-build/; \
./update; \
apt-get install --yes --force-yes devscripts equivs; \
rm -f mpv-build-deps_*_*.deb; \
mk-build-deps -i -t \"apt-get --yes --force-yes --no-install-recommends\"; \
./build -j\$(nproc); \
echo \"From container: done building!\" | nc $HOSTIP $PORT; \
nc -v -l $PORT")

CONTAINERIP=$(sudo docker inspect $CONTAINERID|grep IPAddress|sed 's/.*IPAddress": "//'|sed 's/",$//')

echo "Started mpv-build container with Docker container ID: $CONTAINERID and IP: $CONTAINERIP" 
echo "Waiting to hear from container that the build has finished..."

#listen on host. wait for container to connect and disconnect
nc -l $PORT

#copy file from running container, while it's listening for a connection with nc
sudo docker cp $CONTAINERID:/mpv-build/mpv/build/mpv ./

#connect to the listening socket in the container to make the container finish running
echo "bye" | nc  $CONTAINERIP $PORT

echo "Done"
5 với IP
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.17.0.1
0. Điều này chúng tôi sẽ sử dụng để kết nối từ vùng chứa với MongoDB của chúng tôi đang chạy trên máy chủ

Theo tài liệu Docker về kết nối mạng, mạng cầu nối mặc định không nên được sử dụng cho các kịch bản sản xuất nhưng tốt cho mọi môi trường phát triển/thử nghiệm. Trong bài này chúng ta sẽ tiếp tục sử dụng bridge mặc định

Kết nối với MongoDB cục bộ của bạn từ Docker

Để kết nối với phiên bản MongoDB cục bộ của bạn từ Vùng chứa, trước tiên bạn phải cho phép chấp nhận kết nối từ cổng cầu nối Docker. Để làm như vậy, chỉ cần thêm IP cổng tương ứng vào tệp cấu hình MongoDB

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.17.0.1
1 trong phần
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.17.0.1
2 trong phần giao diện mạng

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.17.0.1

Lưu ý rằng liên kết với 0. 0. 0. 0 cũng sẽ thực hiện thủ thuật nhưng không được khuyến nghị vì lý do bảo mật

Thứ hai, bạn nên chọn tên máy chủ để truy cập cơ sở dữ liệu. Hãy sử dụng

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.17.0.1
3 cho điều đó. Trong ứng dụng được đóng gói của bạn, hãy sử dụng tên máy chủ này trong chuỗi kết nối, như vậy…

mongodb://mongoservice:27017/mydb

Để giới thiệu tên máy chủ

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.17.0.1
3 trong mạng ảo vùng chứa và liên kết nó với máy chủ lưu trữ cục bộ của chúng tôi nơi MongoDB đang chạy, chỉ cần sử dụng
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.17.0.1
5 với IP cổng mạng cầu mà chúng tôi đã phát hiện trước đó

docker run --name mongo2 -p :27017:27017 mongo
2

Có điều này tại chỗ, vùng chứa Docker của bạn giờ đây có thể giao tiếp với máy chủ lưu trữ bằng cách sử dụng bí danh

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.17.0.1
3 và bạn đã sẵn sàng để kết nối với MongoDB cục bộ 🙂

Mẹo. sử dụng bí danh tên máy chủ giống hệt nhau cho MongoDB cục bộ

Để tránh sự không nhất quán và thay đổi cấu hình giữa việc chạy ứng dụng của bạn trong môi trường nhà phát triển cục bộ và vùng chứa Docker, chỉ cần thêm mục nhập cho tên máy chủ đã sử dụng

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.17.0.1
3 vào
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.17.0.1
8 của bạn

docker run --name mongo2 -p :27017:27017 mongo
6

Giờ đây, bạn cũng có thể sử dụng chính xác chuỗi kết nối đó trong môi trường nhà phát triển cục bộ của mình

Xử lý sự cố. MongoDB không khởi động nữa

Sau khi thêm IP cổng cầu nối Docker vào cấu hình của MongoDB như được mô tả trước đây, bạn có thể gặp sự cố khi cố gắng khởi động MongoDB. Mặc dù trước đây mọi thứ đều ổn

docker run --name mongo2 -p :27017:27017 mongo
7

Nếu đúng như vậy, rất có thể do Docker không chạy. Đảm bảo khởi động Docker trước MongoDB. Nếu không thì MongoDB sẽ không khởi động được vì Docker bridge gateway không khả dụng và nó không thể liên kết với nó

docker run --name mongo2 -p :27017:27017 mongo
8

Nếu bạn muốn bắt đầu MongoDB mà không cần Docker chạy, thì bạn cần xóa hoặc nhận xét IP của cổng trong

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.17.0.1
1

Làm cách nào để kết nối với MongoDB từ Docker?

Bạn có thể kết nối với MongoDB trên máy chủ cục bộ. 27017 . Sau đó sử dụng lệnh sau để mở trình bao MongoDB. Tôi đã sử dụng mymongo làm tên vùng chứa tùy ý, mặc dù vậy bạn có thể thay thế mymongo bằng test-mongo hoặc bất kỳ tên vùng chứa nào khác mà bạn chọn. Lệnh show dbs sẽ hiển thị tất cả các cơ sở dữ liệu hiện có của bạn.

Tại sao MongoDB của tôi không kết nối?

Nếu bạn đã tạo người dùng và gặp sự cố khi xác thực, hãy thử cách sau. Kiểm tra xem bạn có đang sử dụng đúng tên người dùng và mật khẩu cho người dùng cơ sở dữ liệu của mình không và bạn có đang kết nối với đúng cơ sở triển khai cơ sở dữ liệu không . Kiểm tra xem bạn có đang chỉ định đúng cơ sở dữ liệu authSource trong chuỗi kết nối của mình không.

Làm cách nào để thêm MongoDB vào Dockerfile?

1. 1 Tạo tệp Docker. Tạo một tệp có tên Dockerfile trong bất kỳ thư mục nào trên máy cục bộ. $ cd ~/Johnny $ mkdir Docker $ cd Docker $ vim Dockerfile. .
1. 2 Tạo Image với Dockerfile. Mở Docker terminal, điều hướng đến thư mục chứa Dockerfile

Cách kết nối MongoDB kết nối?

Cách kết nối với MongoDB .
Tạo cơ sở dữ liệu trên MongoDB. Kết nối với vỏ MongoDB. Tạo cơ sở dữ liệu "testdb". Tạo bộ sưu tập "người dùng" và chèn nó vào "testdb"
Thiết lập người dùng. Kết nối với db quản trị. Tạo quản trị viên người dùng. .
Tạo kết nối tới MongoDB trên CPD. Đặt thông tin cần thiết