2014-07-02 26 views
14

Tôi có dns ký tự đại diện được trỏ đến máy chủ của tôi, ví dụ: * .domain.comLưu lượng truy cập tuyến đường đến vùng chứa docker dựa trên tên miền phụ

Tôi muốn định tuyến từng tên miền phụ cho vùng chứa bộ nạp riêng của nó. Vì vậy, box1.domain.com chuyển đến vùng chứa docker thích hợp. Điều này sẽ hoạt động đối với bất kỳ lưu lượng truy cập nào chủ yếu là HTTP và SSH.

Hoặc có lẽ cổng có thể là một phần của tên miền phụ, ví dụ: 80.box1.domain.com. Tôi sẽ có nhiều vùng chứa docker nên giải pháp phải linh hoạt không được mã hóa cứng cho mỗi vùng chứa.

Trả lời

5

Tôi đã đi với interlock để định tuyến lưu lượng truy cập http bằng cách sử dụng nginx plugin. Tôi đã quyết định sử dụng một cổng ngẫu nhiên cho mỗi kết nối SSH vì tôi không thể làm cho nó hoạt động bằng cách sử dụng tên miền phụ một mình.

0

Giải pháp dễ nhất là sử dụng phương thức Apache mod_rewrite RewriteMap. Nó rất hiệu quả khi được sử dụng chống lại một tập tin văn bản, nhưng nó có thể gọi một kịch bản nếu muốn. Có another StackOverflow answer bao gồm biến thể tập lệnh khá tốt.

Nếu bạn muốn tránh Apache, những người tốt hơn tại dotCloud tạo ra Hipache để thực hiện định tuyến cho các dịch vụ PaaS của họ. Họ thậm chí documented the different things họ đã thử trước khi xây dựng giải pháp của riêng họ. Tôi tìm thấy một tham chiếu đến tsuru.io bằng cách sử dụng chính xác hipache để định tuyến đến các thùng chứa docker, do đó chắc chắn xác nhận nó cho mục đích này.

+0

Đây là liên kết đến tsuru.io đề cập đến tôi đã tham chiếu: [tsuru.io] (http://docs.tsuru.io/en/0.4.0/provisioners/docker/architecture.html). –

+0

Ngoài ra, đây là một số thông tin về cách thực hiện reverse proxying với nginx và dnsmasq, mặc dù tôi thấy nó hơi khó xử: [nginx + dnsmasq] (http://www.cmdln.org/2009/07/12/transparent_dynamic-reverse -proxy-with-nginx /) –

+1

Ngoài ra hãy xem câu hỏi StackOverflow sau: http://stackoverflow.com/questions/18497564/assigning-vhosts-to-docker-ports?rq=1 –

1

Một giải pháp khác là sử dụng https://github.com/jwilder/nginx-proxy.

Công cụ này tự động chuyển tiếp yêu cầu đến thùng chứa thích hợp (dựa trên tên miền phụ qua các biến môi trường chứa VIRTUAL_HOST).

Ví dụ, nếu bạn muốn chuyển hướng box1.domain.com vào một container, chỉ cần đặt các VIRTUAL_HOST biến môi trường container để "box1.domain.com".

Dưới đây là hướng dẫn chi tiết tôi đã viết về nó: http://blog.florianlopes.io/host-multiple-websites-on-single-host-docker.

+0

Điều cần biết, hoạt động theo cách tương tự như khóa liên động. Nó có tạo điều kiện cho SSH không? –

+0

Có vẻ như vậy. Tôi không biết theo cách nào nó có thể tạo điều kiện thuận lợi cho SSH khi Nginx-proxy xử lý các yêu cầu HTTP. –

+0

Nếu bạn muốn SSH vào vùng chứa Docker của bạn bằng cách sử dụng tên miền phụ, tôi nghĩ bạn có thể thêm quy tắc DNS CNAME trỏ đến IP máy chủ của bạn. Hiển thị cổng chứa của SSH để lưu trữ (từ đó đến công khai), giả sử 1020, sẽ cho phép bạn SSH vào vùng chứa của bạn bằng tên miền phụ của bạn: ssh -p 1020 sub.domain.com. –

1

câu trả lời của tôi có thể đến trễ nhưng khi bạn sử dụng docker bạn không thực sự cần ssh để kết nối với các thùng chứa của bạn. với lệnh docker exec, bạn có thể chạy lệnh shell trực tiếp trong vùng chứa đang chạy của mình.

đây là lời khuyên của tôi sử dụng vùng chứa nginx proxy được liệt kê ở đầu để định cấu hình các tên miền phụ. và chạy portainer trên máy chủ của bạn để có cái nhìn tổng quan về Container, hình ảnh, nhật ký của bạn và thậm chí thực hiện lệnh trong tất cả điều này thông qua gui portainer.

Các vấn đề liên quan