Tùy chọn này thực hiện chính xác những gì? Tôi đã đọc rất nhiều về TTY và tôi vẫn còn bối rối. Tôi đã chơi xung quanh không có số -t
và chỉ -i
và có vẻ như các chương trình mong đợi nhập của người dùng sẽ phát ra lỗi mà không cần -t
. Tại sao điều quan trọng đối với TTY giả phải được kích hoạt?Bối rối về tùy chọn Docker -t để Phân bổ một pseudo-TTY
Trả lời
Đối số "-t" KHÔNG được tài liệu rõ ràng hoặc được nhiều người đề cập thường xuyên, theo tìm kiếm của Google.
Nó thậm chí không hiển thị khi bạn hiển thị danh sách (tất cả đối số docker) bằng cách gõ "docker" tại dấu nhắc Bash (với phiên bản 1.8.1 mới nhất).
Trong thực tế, nếu bạn cố gắng để có được sự giúp đỡ cụ thể về lập luận này bằng cách gõ "Docker -t --help" nếu cho trả lời này đáng ngạc nhiên mơ hồ:
"cờ cung cấp nhưng không được định nghĩa: -t"
Vì vậy, bạn không thể đổ lỗi vì bị nhầm lẫn về lập luận này!
Có một đề cập đến trong documention trực tuyến Docker mà nói nó là "Phân bổ một pseudo-tty" và thường được dùng với -i:
https://docs.docker.com/reference/run/
tôi thấy nó được sử dụng trong tài liệu hướng dẫn cho container Docker tuyệt vời jwilder/nginx-proxy theo cách sau:
docker run -d -p 80:80 --name nginx -v /tmp/nginx:/etc/nginx/conf.d -t nginx
trong trường hợp này, những gì nó làm là gửi kết quả đến tty 'ảo' (Bash command prompt/terminal) trong container Docker này. Sau đó, bạn có thể thấy kết quả này bằng cách chạy lệnh docker "docker logs CONTAINER" trong đó CONTAINER là cặp ký tự đầu tiên của ID của vùng chứa này. Bạn có thể tìm thấy ID CONTAINER này bằng cách nhập "docker ps -a"
Tôi đã nhìn thấy đối số "-t" này được đề cập một thời gian ngắn trong liên kết sau đây, trong đó nó nói, "Cờ -t và -i phân bổ một pseudo -tty và giữ stdin mở ngay cả khi không được đính kèm. Điều này sẽ cho phép bạn sử dụng vùng chứa giống như một VM truyền thống miễn là dấu nhắc bash đang chạy. "
https://coreos.com/os/docs/latest/getting-started-with-docker.html
Tôi hy vọng điều này sẽ hữu ích! Tôi không chắc tại sao điều này không được ghi lại hoặc sử dụng nhiều. Có thể đó là thử nghiệm và sẽ được triển khai dưới dạng tính năng được ghi lại trong các phiên bản sắp tới.
Những gì tôi biết về -t
như sau:
docker exec -ti CONTAINER bash
- cho phép tôi "login" trong thùng sơn. Nó cảm thấy như ssh-ing (nó không phải).
Nhưng vấn đề là khi tôi muốn khôi phục cơ sở dữ liệu.
Thông thường tôi làm docker exec -ti mysql.5.7 mysql
- Ở đây tôi thực hiện lệnh mysql trong vùng chứa và nhận thiết bị đầu cuối tương tác.
Tôi đã thêm <dump.sql
vào lệnh trước để tôi có thể khôi phục db. Nhưng nó không thành công với cannot enable tty mode on non tty input
.
Xóa -t
đã giúp.Vẫn không hiểu tại sao:
docker exec -i mysql.5.7 mysql < dump.sql
Tác phẩm cuối cùng hoạt động. Hy vọng điều này sẽ giúp mọi người.
Tùy chọn "-t" đi tới cách Unix/Linux xử lý truy cập đầu cuối. Trong quá khứ, một thiết bị đầu cuối là một kết nối cứng, sau đó là một kết nối dựa trên modem. Chúng có trình điều khiển thiết bị vật lý (chúng là những thiết bị thực sự). Khi các mạng tổng quát được đưa vào sử dụng, một trình điều khiển giả thiết bị đầu cuối đã được phát triển. Điều này là bởi vì nó tạo ra một sự tách biệt giữa sự hiểu biết những khả năng thiết bị đầu cuối có thể được sử dụng mà không cần phải viết nó vào chương trình của bạn trực tiếp (đọc trang người đàn ông trên stty
, curses
).
Vì vậy, với nền đó, hãy chạy vùng chứa không có tùy chọn và theo mặc định bạn có luồng xuất bản (vì vậy, docker run | <cmd>
hoạt động); chạy với "-i", và bạn nhận được thêm dòng stdin (vì vậy <cmd> | docker run -i
hoạt động); sử dụng "-t", thường là trong sự kết hợp "-it" và bạn có một trình điều khiển thiết bị đầu cuối được thêm vào, mà nếu bạn đang tương tác với quá trình này có thể là những gì bạn muốn. Về cơ bản nó làm cho container bắt đầu trông giống như một phiên kết nối đầu cuối.
-Điều này chỉ thị Docker cấp phát một TTY giả được kết nối với stdin của vùng chứa, tạo vỏ bash tương tác trong vùng chứa.
--interactive, -i false Keep STDIN open even if not attached
--tty, -t false Allocate a pseudo-TTY
- 1. Bối rối về mã 'generics' sau đây
- 2. Tuple nhanh để Phân bổ tùy chọn
- 3. Bối rối về các hợp đồng vợt
- 4. bối rối về django ForeignKey, manytomanyfield, inlineformset_factories
- 5. Bối rối về các tham số LINQ
- 6. Bối rối về việc thừa kế CSS
- 7. Bối rối về mẫu javascript này
- 8. Bối rối về? toán tử trong C#
- 9. Bối rối về khi nào nên ném một ngoại lệ
- 10. số Thay bối rối
- 11. Bối rối do phân bổ bộ nhớ và thu gom rác thải trong Julia
- 12. NSManagedObjectNext bối rối
- 13. Bối rối về cài đặt package_dir và gói trong setup.py
- 14. Bối rối trên global.asax?
- 15. Tôi đang bối rối ở đây về awk, sed, v.v.
- 16. Tôi đang bối rối về các không gian tên SOAP
- 17. Bối rối về phân tích cú pháp kho dữ liệu cục bộ & bộ nhớ cache
- 18. Hoàn toàn bối rối về this.next() trong Meteor sắt-router
- 19. Bối rối về kiến trúc Flux của React - waitFor
- 20. Bối rối về cách cài đặt các plugin Rails
- 21. Bối rối về sự phụ thuộc của RequireJS
- 22. Tôi rất bối rối về malloc() và calloc() trên C
- 23. Tôi đang bối rối về từ khóa 'này' trong JavaScript
- 24. Bối rối về bảng phân cảnh và đẩy theo lập trình ios Mục tiêu C
- 25. Bối rối về cách yêu cầu JSONP hoạt động
- 26. Bối rối về lỗi vay theo phương pháp cấu trúc
- 27. bối rối về mảng trở lại # đồ javascript
- 28. Bối rối trên C++ đúc
- 29. Bối rối trên Miller-Rabin
- 30. Bối rối bởi các generics trong Java
Các tài liệu xuất hiện cho 'chạy --help' Docker, không phải' Docker -t --help': '-t, --tty = false Phân bổ một pseudo-TTY' " – bskaggs