2016-02-16 18 views
15

Tôi có một tập tin yml Docker-soạn như trong dướiDocker soạn cổng lập bản đồ

version: '2' 
services: 
    nodejs: 
    build: 
     context: . 
     dockerfile: DockerFile 
    ports: 
     - "4000:4000" 
    links: 
     - redis 
    expose: 
     - "6379" 
    redis: 
    build: 
     context: . 
     dockerfile: Dockerfile-redis 

Mục tiêu của tôi là để chuyển tiếp nodejs-127.0.0.1 port 6379 đến host redis. Tôi đã có thể ping redis từ máy nodejs, nhưng các cổng không được ánh xạ. Đã cố gắng hiển thị các tùy chọn, nhưng cũng không có cơ hội.

Trả lời

1

Nếu bạn muốn truy cập redis từ máy chủ (127.0.0.1), bạn phải sử dụng lệnh ports.

redis: 
    build: 
    context: . 
    dockerfile: Dockerfile-redis 
    ports: 
    - "6379:6379" 
+0

tạo sự phụ thuộc vòng tròn, có ý nghĩa. Tôi đã có trên nodejs –

+0

@ z.a. Tôi có thể đã hiểu lầm những gì bạn muốn, tôi cập nhật bài của tôi bây giờ thấy nhiều 6379 đến các máy chủ (và bất kỳ các máy khác trên mạng, trừ khi bạn có một bức tường lửa). – Anthon

+1

hmm, điều đó cũng sẽ không hoạt động Tôi sợ. điều này là không cần thiết để hiển thị cổng tới vùng chứa nodejs. cổng: hiển thị các cổng cho máy chủ thực. Tôi muốn bản đồ cổng rdis 6379 đến nodejs 6379 cổng. –

17

Nếu bạn muốn liên kết với cổng redis từ nodejs đựng của bạn, bạn sẽ phải tiếp xúc với cổng mà trong redis container:

version: '2' 
services: 
    nodejs: 
    build: 
     context: . 
     dockerfile: DockerFile 
    ports: 
     - "4000:4000" 
    links: 
     - redis 

    redis: 
    build: 
     context: . 
     dockerfile: Dockerfile-redis 
    expose: 
     - "6379" 

Thẻ expose sẽ cho phép bạn tiếp xúc với các cảng mà không xuất bản chúng với máy chủ, nhưng chúng sẽ được tiếp xúc với các mạng container.

https://docs.docker.com/compose/compose-file/#expose

Thẻ ports sẽ được lập bản đồ cổng máy chủ với các cảng container XƯỚNG NGÔN VIÊN: CONTAINER

https://docs.docker.com/compose/compose-file/#ports

+1

vâng tôi nhận được phần này, nhưng vấn đề là khi đi cho 127.0.0.1:6379 trong container nodejs tôi nhận được một lỗi. Tôi đang tìm kiếm một cách tự động để chuyển tiếp cổng về cơ bản. –

+0

Vâng, điều này là do chúng đang chạy tại các máy chủ/vùng chứa khác nhau. Bạn có thể kiểm tra nếu sử dụng 'redis: 6379' thay vì' 127.0.0.1: 6379' vấn đề được giải quyết? – JesusTinoco

+0

có, hoạt động. tôi cần phải tìm hiểu tính năng chuyển tiếp cổng mặc dù. –

6

Điều quan trọng là chỉ ra rằng tất cả các giải pháp trên bản đồ cảng tới mọi giao diện trên máy của bạn. Điều này ít hơn mong muốn nếu bạn có một địa chỉ IP công cộng, hoặc máy của bạn có một IP trên một mạng lớn. Ứng dụng của bạn có thể tiếp xúc với đối tượng rộng hơn nhiều so với mong đợi.

redis: 
    build: 
    context: 
    dockerfile: Dockerfile-redis 
    ports: 
    - "127.0.0.1:3901:3901" 

127.0.0.1 là địa chỉ ip mà các bản đồ với hostname localhost trên máy tính của bạn. Vì vậy bây giờ ứng dụng của bạn chỉ tiếp xúc qua giao diện đó và kể từ 127.0.0.1 chỉ truy cập qua máy tính của bạn, bạn đang không để lộ container của bạn với toàn bộ thế giới.

Tài liệu giải thích thêm về điều này và có thể được tìm thấy tại đây: https://docs.docker.com/compose/compose-file/#ports