Tôi nhận thấy rằng khi sử dụng docker, tôi cần phải hiểu những gì đang diễn ra bên trong container hoặc có những tập tin nào tồn tại bên trong container. Một ví dụ là tải xuống một hình ảnh từ chỉ mục docker - bạn không biết hình ảnh đó chứa gì, do đó bạn không thể khởi động ứng dụng của mình.
Lý tưởng nhất là có thể truy cập chúng thông qua ssh hoặc phương thức tương đương. Có công cụ nào có thể thực hiện được điều này không, hay là khái niệm docker của tôi sai khi cho rằng tôi có thể thực hiện được điều này.
Sau đây là một số cách tiếp cận khác nhau...
A) Sử dụng docker exec (Đơn giản nhất)
Docker 1.3 trở lên được hỗ trợ thực hiện
lệnh, có hành vi tương tự như người nhập
. Lệnh này có thể được sử dụng để chạy một tiến trình mới trong một container đang chạy (container đó phải đang chạy một tiến trình PID 1). Bạn có thể chạy /bin/bash
Để khám phá trạng thái của container:
docker exec -t -i mycontainer /bin/bash
Nhìn thấy Tài liệu dòng lệnh Docker
B) Sử dụng ảnh chụp nhanh
Bạn có thể đánh giá hệ thống tập tin chứa theo cách này:
# tìm ID của container đang chạy của bạn:
docker ps
# tạo ảnh (ảnh chụp nhanh) từ hệ thống tập tin chứa
docker cam kết 12345678904b5 mysnapshot
# khám phá hệ thống tập tin này bằng cách sử dụng bash (ví dụ)
docker chạy -t -i mysnapshot /bin/bash
Bằng cách này, bạn có thể đánh giá hệ thống tập tin của một container đang chạy tại một thời điểm chính xác. Container vẫn đang chạy và không chứa bất kỳ thay đổi nào trong tương lai.
Bạn có thể xóa ảnh chụp nhanh sau (hệ thống tập tin của vùng chứa đang chạy không bị ảnh hưởng!):
docker rmi mysnapshot
C) Sử dụng ssh
Nếu bạn cần quyền truy cập liên tục, bạn có thể cài đặt sshd vào vùng chứa của mình và chạy daemon sshd:
docker chạy -d -p 22 mysnapshot /usr/sbin/sshd -D
# bạn cần tìm ra cổng nào để kết nối:
docker ps
Bằng cách này, bạn có thể chạy ứng dụng của mình bằng ssh (kết nối và thực hiện những gì bạn muốn).
D) Sử dụng nsenter
sử dụngngười nhập
,Nhìn thấyTại sao bạn không cần chạy SSHd trong vùng chứa Docker của mình
Phiên bản ngắn gọn là: với nsenter, bạn có thể đưa shell vào một container hiện có, ngay cả khi container đó không chạy SSH hoặc bất kỳ loại daemon chuyên dụng nào
Tôi là một lập trình viên xuất sắc, rất giỏi!