kết nối từ container docker đến docker host


10

Tôi có một thiết lập nơi tôi chạy tất cả các phần của trang web của mình trong các thùng chứa docker. Nginx của tôi nghe trên cổng 80 và 443 chạy trong một container.

363292a98545        scivm/nginx-django-scivmcom:latest   /usr/bin/supervisord   12 days ago         Ghost               0.0.0.0:40001->22/tcp, 88.198.57.112:443->443/tcp, 88.198.57.112:80->80/tcp     lonely_feynmann           

Tôi muốn thiết lập proxy cho một dịch vụ trong một container khác. Container này được liên kết với cổng 3000 trên máy chủ:

b38c8ef72d0a        mazzolino/strider-dind:latest        wrapdocker /usr/bin/   41 minutes ago      Up 41 minutes       0.0.0.0:3000->3000/tcp, 22/tcp, 27017/tcp                                       distracted_einstein      

Iptables của tôi trên máy chủ docker trông như thế này:

root@Ubuntu-1204-precise-64-minimal /var/run # iptables -L
Chain INPUT (policy ACCEPT) target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:8000
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Từ trong container, tôi không thể kết nối với cổng 3000 trên máy chủ do cấu hình iptables.

Tôi không muốn mở cổng 3000 sang internet công cộng.

Có cách nào để mở một cây cầu trực tiếp giữa container và máy chủ trên cổng 3000 không?

Hoặc tôi nên sửa đổi iptables của mình để chấp nhận từ phạm vi ip docker?

Câu trả lời:


5

Tất cả những gì bạn cần là khả năng liên kết của Docker [không dùng nữa]

Chỉ cần loại bỏ tất cả những thứ phức tạp bạn đã cố gắng làm và bắt đầu sử dụng các thùng chứa có tên và sau đó liên kết chúng với nhau.


Tôi đã xem xét khả năng liên kết docker nhưng nếu tôi hiểu chính xác thì nó có một số vấn đề. 1. Nếu đứa trẻ được khởi động lại, nó sẽ nhận được một địa chỉ IP mới. Sau đó, tất cả các bậc cha mẹ của đứa trẻ đó cũng cần phải được khởi động lại để có được các biến thể môi trường mới. 2. Tôi phải thêm logic vào ứng dụng của mình để đọc các biến môi trường đó để tạo kết nối.
dùng3133485

Một container được khởi động lại ( docker restart your_container) sẽ giữ địa chỉ IP của nó. Chỉ khi bạn chạy một container mới dựa trên một hình ảnh nhất định, nó sẽ nhận được IP ( docker run -d image command) mới.
Elias Probst 29/12/13

2
Điều đó đã từng đúng, nhưng ít nhất là với docker 1.0, "docker restart" cung cấp cho container một địa chỉ IP mới. Chỉ cần nhấn vào điều này trong một số tập lệnh dựa trên hành vi trước đó của ip không thay đổi.
jamshid

1
Trong khi tôi nghĩ rằng đây có lẽ là điều đúng đắn để OP làm, tôi đã đến đây để tìm câu trả lời cho câu hỏi như đã đặt. tức là làm thế nào để liên kết đến một dịch vụ trên máy chủ.
mc0e

2

Câu trả lời của Elias là chính xác, nhưng liên kết dài và khó hiểu. Đây là một bản tóm tắt đơn giản:

Đầu tiên, chạy container để liên kết đến và đặt tên cho nó:

sudo docker run -d --name db training/postgres

Sau đó chạy container khác, liên kết nó với container đầu tiên:

sudo docker run -d -P --name web --link db:db training/webapp python app.py

Liên kết từ container thứ nhất đến container thứ hai được đưa vào /etc/hosts. Vì vậy, bạn có thể sử dụng nó như một tên máy chủ. Ví dụ:

sudo docker run --name web --link db:db training/webapp ping db
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.