2015-09-23 18 views
14

Tôi cần ánh xạ các cổng trên máy chủ đến các cổng trên vùng chứa. Tôi có thể đạt được điều này bằng cách chạy lệnh "docker run" với tùy chọn -p. Làm cách nào để đạt được điều này thông qua số Dockerfile? Sử dụng những điều sau đây đưa ra một "deprecated error"Cách xuất bản cổng trong các tệp docker

EXPOSE 80:8080 

Còn cách nào khác tôi có thể làm cho các cổng tiếp xúc với công chúng thông qua teh dockerfile?

Trả lời

14

Bạn không thể. Những cổng nào được xuất bản trên máy chủ docker đúng là một quyết định cần được thực hiện bởi người quản trị cục bộ, chứ không phải bởi hình ảnh mà họ đang cố chạy; Điều này sẽ là (a) một vấn đề an ninh (hey, tôi chỉ cần mở ssh truy cập vào hệ thống của bạn!) và (b) dễ bị thất bại (container webserver của tôi không thể ràng buộc trên cổng 80 vì tôi đã chạy một máy chủ trên cổng 80).

Nếu bạn muốn tránh dài docker run dòng lệnh, hãy xem xét sử dụng một cái gì đó như docker-compose để tự động hóa quy trình. Sau đó bạn có thể vượt qua Docker-soạn một cấu hình như:

mywebserver: 
    image: myname/mywebserver 
    ports: 
    - 80:8080 

Và sau đó một đơn giản docker-compose up sẽ bắt đầu container của bạn với cảng container 8080 bị ràng buộc để lưu trữ cổng 80.

Cập nhật 2017/03/11

đáp lại bình luận Willa của:

  • Sử dụng docker-compose sẽ không h elp với vấn đề va chạm cổng. Vấn đề va chạm cổng là một lý do tại sao hình ảnh không thể xác định ràng buộc cổng máy chủ. Tôi chỉ đơn giản là cung cấp docker-compose như một giải pháp thay thế cho các dòng lệnh dài docker run có nhiều liên kết cổng. Sự cố va chạm cổng có khả năng cho phép một container thực hiện tấn công từ chối dịch vụ trên máy chủ của bạn: nếu, ví dụ, một container bắt đầu và liên kết với cổng 80 trước máy chủ Apache trên máy chủ của bạn (hoặc trong một vùng chứa khác), sau đó bạn vừa mất dịch vụ web của mình.

  • Về vấn đề bảo mật: Nếu hình ảnh có thể chỉ định các ràng buộc cổng máy chủ, có thể các thùng chứa sẽ mở quyền truy cập vào vùng chứa mà bạn không biết. Cho phép người dùng từ xa truy cập vào một thùng chứa trên máy chủ của bạn sẽ mở ra khả năng thỏa hiệp máy chủ trong trường hợp các tính năng không gian tên trong hạt nhân không hoàn toàn cô lập vùng chứa, và thậm chí nếu bạn hoàn toàn tin tưởng sự cô lập nó mở ra bạn đối với các vấn đề pháp lý tiềm tàng nếu container đó được sử dụng cho mục đích bất hợp pháp. Trong cả hai trường hợp đó là một ý tưởng tồi.

+0

Cảm ơn! giúp –

+0

Cách sử dụng docker-compose có thể giải quyết được khả năng xảy ra va chạm cổng? Bên cạnh đó bạn có thể giải thích một chút về vấn đề bảo mật? – Willa

10

Có sự khác biệt giữa lộxuất bản.

Phương tiện tiếp xúc để mở cổng ở phía bên container, xuất bản phương tiện để mở cổng trên máy chủ Docker với thế giới bên ngoài.

Ví dụ: nếu lệnh docker run của bạn có -p 80: 8080, nó sẽ hiển thị cổng 8080 trên vùng chứa và xuất bản cổng 80 trên máy chủ.

Bạn chỉ có thể trưng ra các cổng trong Dockerfile, nếu bạn muốn tính linh hoạt để xuất bản các cổng, bạn sẽ cần phải sử dụng tùy chọn -p với docker chạy.

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