2015-01-07 35 views
8

Tôi đang cố sử dụng phiên bản nginx được gắn trên đế như một máy chủ proxy cho ứng dụng nút (ExpressJS) của tôi. Nếu không có bất kỳ cấu hình nào cho nginx và xuất bản cổng 80 cho vùng chứa, tôi có thể thấy trang đích nginx mặc định. Vì vậy, tôi biết rằng nhiều thứ đang hoạt động.Làm cách nào để truy cập máy chủ trên máy chủ cục bộ bằng bộ chứa nginx docker?

Bây giờ tôi có thể gắn kết thư mục hỗ trợ trang web của tôi chứa cấu hình cho proxy_pass localhost:3000. Tôi có ứng dụng nút đang chạy cục bộ (không phải trong bất kỳ vùng chứa Docker nào) và tôi có thể truy cập nó qua cổng 3000 (ví dụ: localhost:3000). Tuy nhiên, tôi sẽ giả định rằng với thùng chứa nginx đang chạy, ánh xạ tới cổng 80 và proxy của máy chủ cục bộ của tôi: 3000, tôi sẽ có thể xem ứng dụng đơn giản (hello world) của mình. Thay vào đó, tôi nhận được 502.

Tôi có cần chuyển thứ gì đó vào đế lót ly không? Đây có phải là lỗi cấu hình nginx không? Đây là cấu hình nginx của tôi:

server { 
    listen 0.0.0.0:80; 
    server_name localhost; 

    location/{ 
    proxy_pass http://localhost:3000; 
    } 
} 

Tôi đã thử sử dụng this question nhưng có vẻ như không hữu ích. Đó là trừ khi tôi đang làm điều gì đó hoàn toàn sai.

+0

có thể trùng lặp của [Kết nối với máy chủ MySQL cục bộ thông qua bộ nạp?] (Http://stackoverflow.com/questions/27556301/connect-to-local-mysql-server-through-docker) – Bryan

+0

Tôi đã thử điều đó và dường như không làm cho nó hoạt động. Tôi biết câu hỏi tương tự này đã được hỏi nhiều lần và thậm chí cả lỗi 502 tôi nhận được cũng đã quá, nhưng không ai trong số đó đã làm việc. Tôi sẽ kiểm tra lại khi tôi đi làm về. –

+0

DNS ftw, imo. Máy chủ có tên;) – user2105103

Trả lời

7

Bạn có thể lấy địa chỉ IP hiện tại của bạn như here:

ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}' 

Sau đó, bạn có thể sử dụng cờ --add-host với docker run:

docker run --add-host localnode:$(ifconfig en0 | grep inet | grep -v inet6 | awk '{print \$2}') ... 

Trong số proxypass sử dụng localnode thay vì localhost.

+0

Điều này nằm dọc theo đường thẳng nhưng không hoạt động chính xác với tôi. Đối với một trong những tôi đang làm việc tắt máy tính xách tay của tôi vì vậy phương pháp của tôi về việc trích xuất ip rõ ràng là khác nhau. Tôi đã thử sử dụng cùng một phương thức thay đổi 'en0' nhưng vẫn tiếp tục nhận được kết quả với' addr: 192.xxx.x.xx' vì vậy cuối cùng tôi đã được mã hóa cứng. Tôi sẽ sử dụng tiện ích nào để tách phần đầu 'addr:' thành việc cung cấp sẽ không hoạt động với docker. Cảm ơn bạn mặc dù. Tôi đang viết nhận xét này cho những người khác gặp phải vấn đề này. –

+0

Nevermind, tôi đã sử dụng 'sed' để cắt đầu' addr: '. Như bạn có thể nói tôi không phải là một anh chàng sysops :) –

1

Có. Docker cần biết về máy chủ của bạn. Bạn có thể đặt bí danh cho điều đó bằng công tắc --add-host. Trên một hộp * nix để tạo ra một bí danh cho một tên "localbox", điều này sẽ là:

docker run my_repo/my_image --add-host=localbox:<host_name>` 

trên boot2docker nó sẽ là:

docker run my_repo/my_image --add-host=localbox:192.168.59.3` 

nơi bạn nên thay thế "192.168.59.3" với bất cứ điều gì boot2docker ip trả về.

Sau đó, bạn nên truy cập vào máy chủ của bạn luôn luôn thông qua localbox bí danh, vì vậy chỉ cần thay đổi cấu hình nginx của bạn để:

location/{ 
    proxy_pass http://localbox:3000; 
} 
Các vấn đề liên quan