Đây là giải pháp khi vùng chứa docker thoát bình thường và bạn có thể chỉnh sửa Dockerfile.
Nói chung, khi một bộ chứa docker được chạy, một ứng dụng sẽ được phục vụ bằng cách chạy một lệnh. Từ tham chiếu Dockerfile ,
Cả lệnh CMD và ENTRYPOINT đều xác định lệnh nào được thực thi khi chạy một vùng chứa. ... Dockerfile nên chỉ định ít nhất một trong các lệnh CMD hoặc ENTRYPOINT.
Khi bạn xây dựng một hình ảnh và không chỉ định bất kỳ lệnh nào với CMD hoặc ENTRYPOINT, lệnh CMD hoặc ENTRYPOINT của hình ảnh cơ sở sẽ được thực thi.
Ví dụ: Dockerfile Ubuntu chính thức có CMD ["/bin/bash"]
( https://hub.docker.com/_/ubuntu ). Bây giờ, bin/bash/
lệnh có thể chấp nhận đầu vào và docker run -it IMAGE_ID
lệnh gắn STDIN vào vùng chứa. Kết quả là bạn nhận được một thiết bị đầu cuối tương tác và vùng chứa tiếp tục chạy.
Khi một lệnh với CMD hoặc ENTRYPOINT được chỉ định trong Dockerfile, lệnh này sẽ được thực thi khi chạy vùng chứa. Bây giờ, nếu lệnh này có thể kết thúc mà không yêu cầu bất kỳ đầu vào nào, nó sẽ kết thúc và vùng chứa sẽ thoát. docker run -it IMAGE_ID
sẽ KHÔNG cung cấp thiết bị đầu cuối tương tác trong trường hợp này. Một ví dụ sẽ là hình ảnh docker được xây dựng từ Dockerfile bên dưới-
FROM ubuntu
ENTRYPOINT echo hello
Nếu bạn cần đi đến phần cuối của hình ảnh này, bạn sẽ cần giữ cho vùng chứa hoạt động bằng cách sửa đổi lệnh entrypoint.
FROM ubuntu
ENTRYPOINT echo hello && sleep infinity
Sau khi chạy container một cách bình thường docker run IMAGE_ID
, bạn có thể đi đến một terminal khác và sử dụng docker exec -it CONTAINER_ID bash
để lấy terminal của container.