2015-09-21 24 views
7

Tôi chạy một container Docker sử dụng một rất (8 lines) danh sách dài các đối số:Không khởi động lại vùng chứa Docker "nhớ" đối số chạy ban đầu?

docker run -d -p 5000:5000 --restart=always --name registry \ 
    -v `pwd`/auth:/auth \ 
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ 
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ 
    -v `pwd`/certs:/certs \ 
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \ 
    -e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \ 
    registry:2 

Tôi xác nhận điều này đã chạy qua docker ps:

CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS     NAMES 
ff9c654bfc39  registry:2   "/bin/registry /etc/d" 2 days ago   Up 13 minutes  0.0.0.0:5000->5000/tcp registry 

sau đó tôi dừng lại chứa này qua docker stop ff9c654bfc39 . sau đó tôi đã cố gắng tái chạy container bằng cách phát hành chính xác cùng (liner 8) docker run ... như tôi đã lần đầu tiên:

Error response from daemon: Conflict. The name "registry" is already in use by container ff9c654bfc39. You have to delete (or rename) that container to be able to reuse that name. 

Vì vậy, sau đó tôi chỉ cố gắng docker restart ff9c654bfc39 và đó dường như làm việc, nhưng tôi không 100 chắc chắn Docker "nhớ" 8 dòng đối số của tôi từ khi tôi chạy vùng chứa ban đầu. Bất kỳ ý tưởng nào về việc liệu nó có ghi nhớ không? Nếu không, lệnh khởi động lại thích hợp để bao gồm 8 dòng đó là gì?

+0

Bạn đã thử khởi động lại nó bằng lệnh "docker start" đơn giản chưa? Theo tài liệu tham khảo (https://docs.docker.com/reference/commandline/run/): "Có thể khởi động lại một container đã ngừng với tất cả các thay đổi trước đó của nó nguyên vẹn bằng cách sử dụng docker start. Xem docker ps -a để xem danh sách tất cả các thùng chứa. " – gabowsky

Trả lời

5

Như @gabowsky đang giải thích trong các nhận xét, có, Docker sẽ nhớ.

Sử dụng start, stoprestart sẽ KHÔNG hủy vùng chứa, do đó ghi nhớ mọi thứ, kể cả dữ liệu (ngay cả khi khởi động lại máy chủ). Điều gì stop làm là ngừng quá trình chạy bên trong vùng chứa. Đó là tất cả.

Ngoài ra, Docker lưu trữ tất cả ngữ cảnh, biến, v.v ... ở định dạng nội bộ. Bạn không phải chỉ rõ các đối số dòng lệnh. Để biết Docker biết gì về vùng chứa của bạn, bạn có thể chạy docker inspect.

Ngược lại, rm sẽ hủy mọi thứ, bao gồm cả dữ liệu không được lưu giữ và vùng chứa sẽ cần phải được tạo lại lần nữa (Cung cấp lại đối số lần này). Là một lưu ý cuối cùng, bạn nên sử dụng nhiều tên thay vì SHA1 khi giới thiệu các container trong dòng lệnh

+0

Cảm ơn @Aurelien Thieriot (+1) - về tuyên bố của bạn "* bạn nên sử dụng nhiều tên thay vì SHA1 khi giới thiệu các thùng chứa trong dòng lệnh *", tôi có thể hỏi tại sao không?!? – smeeb

+0

Vâng, có lẽ không có bằng chứng hoặc nền tảng cho nó nhưng tôi thấy nó thuận tiện hơn để làm việc với. Có tính đến việc bạn sẽ nhanh chóng bắt đầu liên kết các thùng chứa với nhau, cập nhật và/hoặc cam kết hình ảnh. Chạy lệnh để tìm SHA1 sẽ tẻ nhạt. –

+0

Ngoài ra, Docker tạo tên ngẫu nhiên tuyệt vời và hài hước –

Các vấn đề liên quan