docker-compose: tùy chọn để tự động loại bỏ container sau khi chạy trong docker-compose.yml


24

Các docker-compose runtài liệu tham khảo nói rằng nó có --rmtùy chọn để

Hủy bỏ container sau khi chạy.

Tôi muốn biến điều này thành runhành vi mặc định cho một số dịch vụ tôi chỉ định docker-compose.yml.

Vì vậy, các câu hỏi là :

  1. Nó có thể được chỉ định bằng cách nào đó trong docker-compose.yml?
  2. Nếu nó có thể, làm thế nào tôi có thể làm điều đó?

( INB4 "Sử dụng bí danh bash, Luke!" : Tất nhiên tôi có thể thực thi điều này bên ngoài docker-compose.ymlbằng cách đặt một số bí danh bash như alias docker-compose-run='docker-compose run --rm'nhưng tôi quan tâm đến việc làm thế nào tôi có thể thực thi chính xác điều đó docker-compose.yml, không phải theo cách nào đó.)

Câu trả lời:


10

TLDR: Vẫn chưa thể 2018-11 ; sử dụng docker-compose downhoặcdocker-compose run --rm

Tôi muốn đưa ra một câu trả lời cập nhật cho câu hỏi này vì gần 3 năm sau. Điều này sẽ tiết kiệm cho người khác một số tìm kiếm.

Tôi đã có cùng một câu hỏi và đây là cách giải quyết mà tôi tìm thấy (bao gồm cả câu hỏi từ chính câu hỏi):

docker-compose down

mà làm như sau:

Dừng các container và loại bỏ các container, mạng, khối lượng và hình ảnh được tạo bởi.

Theo mặc định, những thứ duy nhất bị xóa là:

- Containers for services defined in the Compose file
- Networks defined in the networks section of the Compose file
- The default network, if one is used

Mạng và khối lượng được xác định là bên ngoài không bao giờ được gỡ bỏ.

Mặc dù bạn không thể khai báo nó trong docker-compose.ymlđó sẽ an toàn cho bạn một số rắc rối; đặc biệt là với khối lượng và mạng.

docker-compose run --rm

--rm - Hủy bỏ container sau khi chạy. Bỏ qua trong chế độ tách ra.

Chạy lệnh một lần đối với dịch vụ. Ví dụ: lệnh sau khởi động dịch vụ web và chạy bash như lệnh của nó.

docker-compose run web bash

[...] Lệnh được truyền bằng cách chạy ghi đè lệnh được xác định trong cấu hình dịch vụ .

[...] Lệnh không tạo bất kỳ cổng nào được chỉ định trong cấu hình dịch vụ. Điều này ngăn chặn va chạm cổng với các cổng đã mở. Nếu bạn muốn các cổng của dịch vụ được tạo và ánh xạ tới máy chủ, hãy chỉ định cờ --service-port

docker-compose rm -f

-f, --force Đừng yêu cầu xác nhận xóa


8

Nó không phải là một phần của Dockerfilehoặc docker-compose.ymlspec, nó chỉ là một tùy chọn cli cho lệnh chạy, vì vậy câu trả lời là không. Bạn sẽ cần phải dựa vào một cái gì đó bên ngoài để thực thi.

Nếu bạn có một số công cụ xây dựng cho dự án của mình, tốt nhất là nên bọc các tác vụ soạn thảo docker với nó. Ví dụ, các dự án lớp của chúng tôi cung cấp các tác vụ liên quan đến docker đặt một số tùy chọn mặc định như --rmcho các tác vụ đang chạy.

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.