2015-04-08 14 views
6

Vì vậy, tôi có một ứng dụng docker chạy trên cổng 9000, và tôi muốn có điều này chỉ truy cập qua https thay vì http, tuy nhiên tôi dường như không có ý nghĩa về cách amazon xử lý các cổng. Trong ngắn hạn tôi muốn chỉ phơi bày cổng 443 và không 80 (trên lớp cân bằng tải và lớp thể hiện), nhưng đã không thể làm điều này.AWS Beanstalk và Docker ports = cách thức xử lý của việc này là gì?

Vì vậy Dockerfile của tôi có:

EXPOSE 9000 

và Dockerrun.aws.json của tôi có:

{ 
    "AWSEBDockerrunVersion": "1", 
    "Ports": [{ 
     "ContainerPort": "9000" 
    }] 
} 

và tôi dường như không thể truy cập vào mọi thứ thông qua cổng 9000, nhưng 80 chỉ.

Khi tôi ssh vào trường hợp container docker đang chạy và tìm các cổng với netstat, tôi nhận cổng 80 và 22 và một số cổng udp khác, nhưng không có cổng 9000. Amazon quản lý thế nào? Quan trọng hơn, làm cách nào để người dùng có được hành vi mong đợi?

Cố gắng điều này với ssl và https cũng mang lại điều tương tự. Chứng chỉ được thiết lập và ánh xạ tới cổng 443, tôi thậm chí còn tạo ra một trường hợp trong .ebextensions tập tin cấu hình để mở cổng 443 trên dụ và vẫn không có ssl

sslSecurityGroupIngress: 
     Type: AWS::EC2::SecurityGroupIngress 
     Properties: 
     GroupName: {Ref : AWSEBSecurityGroup} 
     IpProtocol: tcp 
     ToPort: 443 
     FromPort: 443 
     CidrIp: 0.0.0.0/0 

Cách duy nhất mà tôi có thể nhận SSL để làm việc là để có Load Balancer sử dụng cổng 443 (ssl) chuyển tiếp đến cổng cá thể 80 (không https) nhưng điều này là vô lý. Làm thế nào trên trái đất để tôi mở cổng ssl trên dụ và đặt docker để sử dụng cổng đã cho? Có ai từng làm điều này thành công không?

Tôi đánh giá cao bất kỳ sự trợ giúp nào về điều này - Tôi đã chải qua các tài liệu và có được điều này xa với nó, nhưng điều này chỉ đơn giản là câu đố tôi. Trong ngắn hạn tôi muốn chỉ phơi bày cổng 443 và không 80 (trên lớp cân bằng tải và lớp thể hiện), nhưng đã không thể làm điều này.

Có một ngày tuyệt vời

Cheers

Trả lời

4

Được biết vấn đề, từ http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_image.html:

Bạn có thể chỉ định nhiều cảng container, nhưng đàn hồi Beanstalk chỉ sử dụng một trong những đầu tiên để kết nối container của bạn để proxy ngược của máy chủ và yêu cầu tuyến đường từ Internet công cộng.

Vì vậy, nếu bạn cần nhiều cổng, AWS Elastic Beanstalk có lẽ không phải là lựa chọn tốt nhất. Ít nhất tùy chọn Docker.

Về SSL - chúng tôi đã giải quyết vấn đề này bằng cách sử dụng phiên bản nginx chuyên dụng và proxy_pass'ing tới URL môi trường Elastic Beanstalk.

+0

Tôi muốn chỉ hiển thị cổng 443 và không 80 (trên lớp cân bằng tải và lớp thể hiện), nhưng không thể thực hiện việc này. Tôi rất tò mò muốn biết thêm một chút về cách bạn giải quyết vấn đề này. Theo tôi hiểu nó beanstalk là một cân bằng tải và một số trường hợp theo đó phát triển với tải. Hiện tại tôi chưa biết cách để lộ cổng 443 trên bản sao - dường như chỉ sử dụng cổng 80. Vì vậy, nếu tôi hiểu chính xác, bạn có một hộp nginx ec2 riêng biệt phục vụ như một proxy ngược hoặc tương tự - cổng chuyển tiếp 80 lưu lượng truy cập đến cổng 443? – Josh

+0

Vâng, chính xác. Chúng tôi không sử dụng môi trường beanstalk đàn hồi trực tiếp (lý do khác nhau), chúng tôi luôn sử dụng cá thể ec2 riêng biệt với nginx làm proxy ngược. Trong trường hợp này, bạn có thể xử lý tất cả các công cụ SSL như chứng chỉ, v.v.ở một nơi. – sap1ens

+1

Phải, cảm ơn. Đó có thể là lựa chọn duy nhất của tôi. Mong rằng aws sẽ sắp xếp thứ gì đó cơ bản như thế này. – Josh

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