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 //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- Truy cập VirtualBox -> chọn VM "mặc định" -> nhấp vào nút "Hiển thị"
- Chạy lệnh.
1HOSTIP="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 //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"
- 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 //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ậyHOSTIP="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 //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 //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 //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 //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
2Có đ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ạndocker run --name mongo2 -p :27017:27017 mongo
6Giờ đâ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
7Nế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
8Nế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