2016-11-22 42 views
13

Địa chỉ IP nào có thể chứa bộ chứa docker kết nối với máy chủ lưu trữ trên Docker cho Windows (trên Windows 10)? Làm thế nào để bạn tìm thấy địa chỉ IP này?Cách kết nối với máy chủ lưu trữ docker từ vùng chứa trên Windows 10 (Docker cho Windows)

Ví dụ: bạn có dịch vụ đang chạy tại cổng 1234 trên máy tính Windows 10 của mình. Một chương trình bên trong vùng chứa của bạn phải truy cập dịch vụ này. Địa chỉ IP nào chương trình nên sử dụng để kết nối với máy chủ?

+0

Trong một số trường hợp nó ** 10.0.0.2 ** – nwinkler

+0

Xin chào, container của bạn là Windows hay Linux? –

Trả lời

23

Câu trả lời ngắn: trong hầu hết các trường hợp, bạn sẽ cần 10.0.75.1.

Trong Docker cho Windows, vùng chứa truyền thông qua bộ điều hợp vEthernet có tên DockerNAT. Để tìm chi tiết của nó, mở Command Prompt và gõ

ipconfig 

Hãy tìm một mục mà trông giống như

Ethernet adapter vEthernet (DockerNAT): 

    Connection-specific DNS Suffix . : 
    Link-local IPv6 Address . . . . . : fe80::fd29:297:4583:3ad4%4 
    IPv4 Address. . . . . . . . . . . : 10.0.75.1 
    Subnet Mask . . . . . . . . . . . : 255.255.255.0 
    Default Gateway . . . . . . . . . : 

Địa chỉ IP ở bên phải của IPv4 Address là cái bạn cần.

Lưu ý: đảm bảo dịch vụ cho phép kết nối từ bên ngoài máy chủ của bạn. Theo như dịch vụ đó là có liên quan, container docker của bạn là một máy khác nhau. Ngoài ra hãy chắc chắn rằng Windows Firewall cho phép giao tiếp đến và đi từ dịch vụ.

+1

bạn có thể mở rộng cách cho phép kết nối từ bên ngoài máy chủ của bạn không? – PeterE

+0

Điều này tùy thuộc vào dịch vụ bạn muốn kết nối. Hầu hết các dịch vụ đều có một tệp cấu hình để bạn có thể chỉ định một IP (dải ô) được phép kết nối với dịch vụ của bạn. – RemiX

+1

Điều gì sẽ xảy ra nếu tôi muốn nhận IP theo chế độ ăn tối, ví dụ như tên miền (máy chủ lưu trữ ping)? Tôi đang cố gắng để triển khai ứng dụng của tôi trong Azure (Windows Server 2016 với Containers) mà không nhận được 10.0.75.1. –

7

Một trong những tùy chọn cho phép bạn kết nối từ thùng chứa để lưu trữ, là chạy container của bạn với thông số

--net="host"

Ví dụ:

docker run -it --net="host" container_name 

Sau đó từ container, bạn có thể kết nối với dịch vụ trên máy chủ lưu trữ sử dụng:

localhost:port

Nhưng trong trường hợp này, bạn sẽ không thể liên kết nhiều vùng chứa hơn bằng tham số --link.

Thông tin thêm về chủ đề này: http://phillbarber.blogspot.sk/2015/02/connect-docker-to-service-on-parent-host.html

+0

Như tôi đã hiểu từ những nỗ lực của tôi và [câu trả lời này] (http://stackoverflow.com/questions/35586778/docker-container-doesnt-expose-ports-when-net-host-is-mentioned-in-the-docker), '--net =" host "' không cho phép ánh xạ cổng (nói cổng 80 đến 8000) và có thể gây xung đột giữa các số cổng trên máy chủ và các cổng trong vùng chứa Docker (ví dụ: nếu cả máy chủ và vùng chứa có Apache) chạy trên cổng 80). – RemiX

+4

Câu trả lời của bạn không hoạt động đối với Windows và Mac atm. '--net =" host "' chỉ hoạt động với Linux. Trên máy Mac, bạn có thể truy cập máy chủ bằng tên 'docker.for.mac.localhost', trên Windows không có tên như vậy và bạn có thể nhận địa chỉ IP cầu nối với' ipconfig' – Derp

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