Có thể có các cổng truy cập vùng chứa Docker được máy chủ lưu trữ không? Cụ thể là tôi có MongoDB và RabbitMQ chạy trên máy chủ và tôi muốn chạy một tiến trình trong một thùng chứa Docker để nghe hàng đợi và (tùy chọn) ghi vào cơ sở dữ liệu.Chuyển tiếp cổng máy chủ đến bộ chứa docker
Tôi biết rằng tôi có thể chuyển tiếp từ vùng chứa đến máy chủ (thông qua tùy chọn -p) và tôi có kết nối với thế giới bên ngoài (ví dụ: internet) từ trong vùng chứa Docker nhưng tôi không muốn để lộ Các cảng RabbitMQ và MongoDB từ máy chủ đến thế giới bên ngoài.
EDIT: một số giải thích:
Starting Nmap 5.21 (http://nmap.org) at 2013-07-22 22:39 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00027s latency).
PORT STATE SERVICE
6311/tcp open unknown
[email protected] ~ % docker run -i -t base /bin/bash
[email protected]:/# apt-get install nmap
[email protected]:/# nmap 172.16.42.1 -p 6311 # IP found via docker inspect -> gateway
Starting Nmap 6.00 (http://nmap.org) at 2013-07-22 20:43 UTC
Nmap scan report for 172.16.42.1
Host is up (0.000060s latency).
PORT STATE SERVICE
6311/tcp filtered unknown
MAC Address: E2:69:9C:11:42:65 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 13.31 seconds
tôi phải làm thủ thuật này để có được bất kỳ kết nối internet withing container: My firewall is blocking network connections from the docker container to outside
EDIT: Cuối cùng tôi đã đi với việc tạo ra một cây cầu tùy chỉnh sử dụng pipework và có các dịch vụ nghe trên IP của cầu. Tôi đã đi với phương pháp này thay vì có MongoDB và RabbitMQ lắng nghe trên cầu docker bởi vì nó cho phép linh hoạt hơn.
Làm cách nào để vùng chứa biết IP cần gửi yêu cầu? Tôi có thể hardcode giá trị (172.17.42.1 ở đây và trên giàn khoan thử nghiệm của tôi, nhưng đó là luôn luôn đúng?), Nhưng điều đó dường như đi ngược lại các nguyên tắc docker làm việc với bất kỳ máy chủ! –
một tùy chọn khác là liên kết dịch vụ máy chủ của bạn (ví dụ mongodb) để nghe trên tất cả các giao diện mạng (ví dụ 0.0.0.0), cấu hình tường lửa của bạn để chỉ các máy trong mạng nội bộ của bạn mới có thể kết nối với các cổng tương ứng và sau đó kết nối với máy chủ địa chỉ IP mạng của máy từ bên trong vùng chứa. – Josh
@Seldo: Giao diện đó có cần cấu hình để hiển thị không? Tôi đang sử dụng docker 1.7.1, và tôi chỉ có 'lo' và' eth0'. – mknecht