2016-02-29 23 views
5

Tôi cần tạo một số vùng chứa docker phải được truy cập bởi các máy tính khác trong cùng một mạng.Làm cách nào để làm cho vùng chứa Docker có thể truy cập được vào các máy mạng khác thông qua IP?

Vấn đề là khi tôi tạo vùng chứa, Docker nhận địa chỉ IP chỉ hợp lệ trong máy chủ.

Tôi đã xem tài liệu Docker (Networking) nhưng không có gì hoạt động.

Nếu tôi chạy ifconfig trên máy của mình, địa chỉ IP của tôi là 172.21.46.149. Khi tôi vào trong thùng chứa (Ubuntu) và chạy ifconfig địa chỉ IP là 172.17.0.2. Tôi cần Docker để có được, ví dụ, 172.21.46.150.

Tôi có thể làm như thế nào?

+0

Có thể OK nếu vùng chứa của bạn liên kết trực tiếp với cổng chủ để giao tiếp? – Auzias

Trả lời

1

Vùng chứa Docker có thể dễ dàng được truy cập bởi nút mạng khác khi vùng chứa: cổng được xuất bản qua cổng máy chủ:.

Điều này được thực hiện bằng tùy chọn -p trình điều khiển docker-run. Dưới đây là tổng hợp của người đàn ông trang ($man docker-run cho biết thêm chi tiết và ví dụ mà tôi sẽ không sao chép/dán):

-p, --publish=[] 
     Publish a container's port, or range of ports, to the host. 

Xem doc online. Điều này cũng có thể là thú vị khi đọc được question/answer.

Về cơ bản:

docker run -it --rm -p 8085:8080 my_netcat nc -l -p 8080

sẽ cho phép các nút mạng LAN để kết nối với Docker-host-ip: 8085 và thảo luận với các lệnh netcat.

+0

Vấn đề với giải pháp này là khi tôi phát triển môi trường, mọi thứ sẽ trở nên lộn xộn một chút. Tôi nghĩ rằng miễn là tôi sẽ có nhiều thùng chứa ... –

+0

Vâng ... Bạn có thể muốn chỉnh sửa câu hỏi của mình để làm rõ hơn. Bạn có thực sự cần tất cả các thùng chứa trên cùng một mạng LAN với LAN không? Tôi hiểu lý do nhiều container, nhưng tôi nghi ngờ các máy chủ sẽ chạy hơn 65k container (tạo ra một thiếu ổ cắm để ràng buộc). Hãy nhớ rằng một thực hành tốt nhất Docker là ["Caas"] (https://stackoverflow.com/questions/35610995/consul-and-tomcat-in-the-same-docker-container#comment58922618_35610995) và theo CaaS container (nghĩa vụ chạy một dịch vụ) chỉ cần một cổng, hai hoặc ba trong các trường hợp dịch vụ đa cổng đặc biệt. – Auzias

2

Truy cập nhiều máy chủ bao gồm mạng che phủ lớp phủ với khám phá dịch vụ.
Xem docker/networking:

Một mạng lớp phủ đòi hỏi một cửa hàng giá trị khóa. Cửa hàng duy trì thông tin về trạng thái mạng bao gồm khám phá, mạng, điểm cuối, Địa chỉ IP và hơn thế nữa.
Công cụ Docker hiện hỗ trợ các cửa hàng lưu trữ giá trị khóa Consul, etcd, ZooKeeper (Cửa hàng phân phối) và BoltDB (Lưu trữ cục bộ).
Ví dụ này sử dụng Consul.

https://github.com/docker/dceu_tutorials/raw/master/images/tut6-step1.png

Nếu nếu bạn hạch của bạn (các máy tính khác trên cùng một mạng) chạy daemon Docker của họ với một tham chiếu đến mà cửa hàng quan trọng có giá trị, họ sẽ có thể giao tiếp với các container từ các nút khác .

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://<NODE-0-PRIVATE-IP>:8500/network --cluster-advertise=eth0:2375" 

Bạn chỉ cần để tạo ra một mạng overlay:

docker network create -d overlay --subnet=10.10.10.0/24 RED 

(nó sẽ có mặt tại tất cả các máy tính vì các cửa hàng key-value)

Và chạy container của bạn trên mạng đó :

docker run -itd --name container1 --net RED busybox 
Các vấn đề liên quan