2016-03-21 19 views
8

Tôi đang cố gắng thiết lập môi trường dev cho dự án của mình.Sử dụng mạng máy chủ và các mạng bổ sung trong docker soạn

Tôi có một vùng chứa (ms1) nên được đặt trong mạng riêng của mình ("dịch vụ" trong trường hợp của tôi) và vùng chứa (apigateway) sẽ truy cập vào mạng đó khi hiển thị cổng http đến mạng của máy chủ.

Lý tưởng nhất là tập tin soạn Docker tôi sẽ trông như thế này:

version: '2' 
services: 
    ms1: 
     expose: 
      - "13010" 
     networks: 
      services: 
       aliases: 
        - ms1 
    apigateway: 
     networks: 
      services: 
       aliases: 
        - api 
     network_mode: "host" 
networks: 
    services: 

Docker-soạn không cho phép sử dụng network_mode và mạng cùng một lúc.

Tôi có lựa chọn thay thế khác không?

Hiện nay tôi đang sử dụng này:

apigateway: 
     networks: 
      services: 
       aliases: 
        - api 
     ports: 
      - "127.0.0.1:10000:13010" 

và sau đó apigateway chứa lắng nghe trên 0.0.0.0:13010. Nó hoạt động nhưng nó là chậm và nó bị đóng băng nếu kết nối internet của máy chủ bị hỏng.

Ngoài ra, tôi đang lên kế hoạch sử dụng âm hộ trong tương lai khi docker, nó có cho phép giải quyết một cách sạch sẽ không?

+0

Bạn có thể sử dụng địa chỉ IP của ms1 từ apigateway không? Xem https: // stackoverflow.com/questions/27937185/assign-static-ip-to-docker-container làm thế nào để làm điều đó với docker 1.10.1 –

+0

Tôi đang cố gắng làm tương tự nhưng để giải quyết một vấn đề khác nhau (có thể). Trong trường hợp của tôi, tôi tạo ra một mạng chia sẻ giữa hai dịch vụ nhưng vì một lý do nào đó, một trong những dịch vụ không được kết nối với internet (tôi nghĩ lý do là nó không phải là một phần của mạng chủ). Tuy nhiên, vấn đề là nó không thể phân giải URL vì không thể truy cập DNS. Tôi đã thực hiện một quickfix bằng cách sử dụng địa chỉ IP nhưng sẽ xem xét kỹ lưỡng để chuyển tiếp yêu cầu đến đúng DNS. – omrsin

Trả lời

0

tôi sẽ cố gắng này:

1/Tìm các mạng máy chủ docker network ls

2/Sử dụng tập tin dockercompose này

 services: 
      ms1: 
       ports: 
        - "13010" 
       networks: 
        - service 
      apigateway: 
       networks: 
        - front 
        - service 

     networks: 
      front: 
      service: 
       external: 
        name: "<ID of the network>" 
+0

Khi tôi cố gắng tạo mạng lưu trữ bằng cách sử dụng lệnh ở trên, tôi nhận được lỗi này 'Phản hồi lỗi từ daemon: chỉ một trường hợp của mạng" máy chủ "được phép ' – disrvptor

+0

Vì vậy, bạn có thể sử dụng mạng đã tồn tại. Tôi đã cập nhật câu trả lời nhưng tôi không có khả năng kiểm tra nó. – Plup

0

Trong Docker 1,13 bạn sẽ có thể để tạo ra một dịch vụ để cầu nối giữa hai mạng. Tôi đang sử dụng một cái gì đó tương tự để sửa chữa another problem và tôi nghĩ rằng điều này cũng có thể giúp đây:

docker service create \ 
--name proxy \ 
--network proxy \ 
--publish mode=host,target=80,published=80 \ 
--publish mode=host,target=443,published=443 \ 
--constraint 'node.hostname == myproxynode' \ 
--replicas 1 \ 
letsnginx 
0

expose trong Docker-soạn does not publish the port on the host. Vì bạn có thể không cần liên kết dịch vụ nữa (thay vào đó bạn nên dựa vào các mạng Docker như bạn đã làm), tùy chọn có giá trị giới hạn nói chung và dường như không mang lại giá trị nào cho bạn trong kịch bản của bạn.

Tôi nghi ngờ bạn đã vô tình sử dụng nó và sau khi nhận ra rằng nó dường như không có bất kỳ hiệu ứng nào, vấp phải thực tế là sử dụng trình điều khiển mạng máy chủ sẽ "hoạt động". Điều này không liên quan gì đến tài sản expose, hãy nhớ bạn. Nó chỉ là trình điều khiển mạng máy chủ lưu trữ cho phép chứa các quy trình liên kết trực tiếp với giao diện mạng máy chủ. Nhờ đó, bạn có thể tiếp cận quy trình cổng API từ bên ngoài. Bạn có thể xóa thuộc tính expose và nó vẫn hoạt động.

Nếu đây là lý do duy nhất lý do tại sao bạn chọn trình điều khiển mạng máy chủ, nạn nhân sau đó bạn đã sa ngã của các X-Y problem:

(tl; dr) Bạn không bao giờ nên cần phải sử dụng trình điều khiển mạng máy chủ trong các tình huống bình thường, trình điều khiển mạng cầu nối mặc định hoạt động tốt. Những gì bạn đang tìm kiếm là thuộc tính ports, không phải là expose. Điều này thiết lập chuyển tiếp cổng thích hợp đằng sau hậu trường.

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