Trong thực tế để bắt đầu một container tôi làm:
docker run a8asd8f9asdf0
Nếu đó là trường hợp, những gì:
docker start
làm gì
Trong hướng dẫn sử dụng có ghi
Bắt đầu một hoặc nhiều container đã dừng
execute
?
Trong thực tế để bắt đầu một container tôi làm:
docker run a8asd8f9asdf0
Nếu đó là trường hợp, những gì:
docker start
làm gì
Trong hướng dẫn sử dụng có ghi
Bắt đầu một hoặc nhiều container đã dừng
execute
?
Câu trả lời:
Đây là một câu hỏi rất quan trọng và câu trả lời rất đơn giản, nhưng cơ bản:
docker run IMAGE_ID
và không docker run CONTAINER_ID
docker stop CONTAINER_ID
, bạn có thể khởi chạy lại cùng một vùng chứa với lệnh docker start CONTAINER_ID
và dữ liệu và cài đặt sẽ giống nhau.docker rm container_id
). Mặt khác, khối lượng dữ liệu tồn tại loại bỏ -v
ngăn chặn trừ khi tùy chọn được cung cấp rõ ràng trên dòng lệnh. Vị trí khối lượng trên hệ thống máy chủ có thể được kiểm tra trực tiếp. Xem bài viết này
&
ở cuối run
dòng lệnh? Tôi cần dịch vụ này như một dịch vụ quan trọng (24 giờ)
run
chạy một hình ảnhstart
bắt đầu một thùng chứa .Các docker run
tài liệu có đề cập:
Đầu
docker run
tiên, lệnh tạo một lớp chứa có thể ghi trên hình ảnh được chỉ định, sau đó khởi động nó bằng lệnh được chỉ định.Đó là, docker run tương đương với API
/containers/create
rồi/containers/(id)/start
.
Bạn không chạy một container hiện có, bạn docker thực thi nó (kể từ docker 1.3) .
Bạn có thể khởi động lại một container đã thoát .
-i
vào docker run
cho một quá trình tương tác? Ý tôi là, docker run cần một hình ảnh để chạy một container.
Giải thích với một ví dụ:
Xem xét bạn có một hình ảnh trò chơi (iso) trong máy tính của bạn.
Khi bạn run
(gắn hình ảnh của mình dưới dạng ổ đĩa ảo), một ổ đĩa ảo được tạo với tất cả nội dung trò chơi trong ổ đĩa ảo và tệp cài đặt trò chơi sẽ tự động được khởi chạy. [Chạy hình ảnh docker của bạn - tạo một thùng chứa và sau đó bắt đầu nó.]
Nhưng khi bạn stop
(tương tự như docker dừng), ổ đĩa ảo vẫn tồn tại nhưng dừng tất cả các quy trình. [Khi container tồn tại cho đến khi nó không bị xóa]
Và khi bạn làm start
(tương tự như docker start), từ ổ đĩa ảo, các tệp trò chơi sẽ bắt đầu thực thi. [bắt đầu container hiện có]
Trong ví dụ này - Hình ảnh trò chơi là hình ảnh Docker của bạn và ổ đĩa ảo là thùng chứa của bạn.
Câu trả lời của daniele3004 đã khá tốt.
Chỉ là một công thức nhanh chóng và bẩn thỉu cho những người như tôi, những người pha trộn run
và thỉnh start
thoảng:
docker run [...]
= docker pull [...]
+docker start [...]
"...docker run is equivalent to the API /containers/create then /containers/(id)/start.
(nguồn: docs.docker.com/engine/reference/commandline/run )
run
lệnh tạo một container từ hình ảnh và sau đó bắt đầu quá trình root trên container này. Chạy nó với run --rm
cờ sẽ giúp bạn tránh được những rắc rối trong việc loại bỏ container chết vô dụng sau đó và sẽ cho phép bạn bỏ qua sự tồn tại docker start
và docker remove
hoàn toàn.
run
lệnh thực hiện một số điều khác nhau:
docker run --name dname image_name bash -c "whoami"
docker ps
bash -c "whoami"
. Nếu một người chạy docker run --name dname image_name
mà không có lệnh để thực thi container sẽ chuyển sang trạng thái dừng ngay lập tức.docker remove
trước khi tung ra container dưới cùng tên.Làm thế nào để loại bỏ container một khi nó được dừng tự động? Thêm một--rm
cờ để rarun
lệnh:
docker run --rm --name dname image_name bash -c "whoami"
Làm thế nào để thực thi nhiều lệnh trong một container? Bằng cách ngăn chặn quá trình gốc đó khỏi chết. Điều này có thể được thực hiện bằng cách chạy một số lệnh vô dụng khi bắt đầu với--detached
cờ và sau đó sử dụng "thực thi" để chạy các lệnh thực tế:
docker run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"
Tại sao chúng ta cần docker stop
sau đó? Để ngăn chặn thùng chứa còn sót lại này mà chúng tôi đã khởi chạy trong đoạn mã trước với lệnh vô tậntail -f /dev/null
.