Cách khởi động lại vùng chứa docker đã dừng


90

Tôi khởi chạy vùng chứa docker từ một hình ảnh bằng lệnh sau:

$ docker run -d myimage /bin/bash -c "mycommand"

Khi "mycommand"kết thúc, vùng chứa bị dừng (tôi cho rằng nó bị dừng), nhưng nó không bị xóa, vì tôi có thể nhìn thấy nó bằng lệnh này:

$ docker ps -a

Có cách nào để restartvùng chứa này có cùng thông số và giữ dữ liệu được tạo bởi mycommandkhông?


"Volume" hoặc "mount a host directory" có làm bạn hài lòng không? Giống như doc đề cập: docs.docker.com/engine/tutorials/dockervolumes
Haoming Zhang

Câu trả lời:


124

Có, khi lệnh ban đầu kết thúc việc thực thi thì vùng chứa sẽ dừng lại.

Bạn có thể bắt đầu một vùng chứa đã dừng bằng cách sử dụng:

docker start container_name

Nếu bạn muốn xem đầu ra của lệnh của mình thì bạn nên thêm -aicác tùy chọn:

docker start -ai container_name

Tái bút. có docker restart container_namenhưng được sử dụng để khởi động lại một vùng chứa đang chạy - tôi tin rằng đó không phải là trường hợp của bạn.


1
Vùng chứa của tôi dừng ngay sau khi bắt đầu, mỗi lần. Không chắc chắn điều đó là gì. Sử dụng lệnh -ai đưa ra phản hồi này: Không thể mở tệp yêu cầu: [Errno 2] Không có tệp hoặc thư mục nào như vậy: '
request.txt

@geoidesic bạn có thể vui lòng cung cấp thêm chi tiết không? Bạn đang nói về loại nào trên tệp 'request.txt'?
lmtx

1
@geoidesic, Để khắc phục sự cố này, tôi đã thay đổi điểm nhập để chỉ cần chạy lệnh sleep 900 cho phép tôi sau đó kết nối với vùng chứa và chạy các lệnh bên trong nó bằng cách sử dụng docker exec -it container_name bash. Khi tôi chạy lệnh từ bên trong vùng chứa, tôi có thể thấy lý do tại sao việc triển khai ban đầu của tập lệnh của tôi không thành công và tôi đã sửa nó.
PatS

@PatS bạn có thể vui lòng chia sẻ cách bạn kết hợp startvới sleep? Tôi không thể đến điểm mà tôi có thể chạyexec
3pitt

9

Đầu tiên, $ docker ps -ahiển thị tất cả các vùng chứa (những vùng đang chạy và những vùng đã dừng), vì vậy đó là lý do bạn không thấy vùng chứa đã dừng của mình được liệt kê.

Thứ hai, bạn có thể dễ dàng bắt đầu một vùng chứa đã dừng đang chạy:

$ docker start container_name

Khi vùng chứa đã được khởi động, bạn có thể chạy lệnh của mình bằng cách:

$ docker exec -it container_name bash -c "mycommand"

Nội dung bạn tạo trong vùng chứa sẽ vẫn còn bên trong vùng chứa của bạn miễn là nó tồn tại. Nếu bạn muốn giữ dữ liệu ngay cả khi vùng chứa của bạn bị xóa, bạn có thể sử dụng một ổ đĩa .


1

Nó nên được

$ docker restart container_id # OR
$ docker restart container_name

câu trả lời được chấp nhận chỉ ra restartlà cho một container đã chạy
3pitt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.