2015-07-30 18 views
8

khi tôi chạy vùng chứa docker làm công việc marathon, nó tạo vùng chứa docker trong hệ thống nô lệ mesos hoạt động. khi đình chỉ hoặc phá hủy công việc docker những gì tôi mong đợi rằng marathon nên xóa các container docker như nó không còn cần thiết. Nhưng vùng chứa không bị xóa. Tôi phải xóa chúng theo cách thủ công mỗi khi marathon khởi động lại công việc vùng chứa docker.marathon không xóa vùng chứa đế lót ly sau khi hủy công việc

có cách nào tự động xóa các vùng chứa không mong muốn này không?

Edit: Thêm tệp json để bắt đầu một công việc marathon

{ 
    "id": "pga-docker", 
    "cmd":"sh pga-setup.sh", 
    "cpus": 0.5, 
    "mem": 1024.0, 
    "container": { 
    "type": "DOCKER", 
    "docker": { 
     "image": "pga:test", 
     "parameters": [ 
     { "key": "env", "value": "SERVER_HOST=value" }, 
     { "key": "env", "value": "SERVER_PORT=value" } 
     ], 
     "network": "BRIDGE", 
     "portMappings": [ 
     { "containerPort": 80, "hostPort": 0} 
     ] 
    } 
    } 
} 
+0

phiên bản mesos nào bạn sử dụng? – haosdent

+0

Tôi kiểm tra mã mesos hiện tại, vùng chứa phải được loại bỏ. – haosdent

+0

Tôi đang quan sát hành vi tương tự cho các ứng dụng bị phá hủy. Không chắc chắn nếu đó là vấn đề Marathon hoặc vấn đề mesos-slave. – Dharmit

Trả lời

1

Marathon sẽ khởi động lại một container Docker mà thất bại nên bạn chỉ còn số lượng các trường hợp mà bạn yêu cầu. Nó có thể là bạn thấy các thùng chứa dừng/thất bại mà không được làm sạch bởi Mesos. Điều này có thể liên quan đến thực tế là Mesos trì hoãn dọn dẹp container cho đến khi GC. thấy https://issues.apache.org/jira/browse/MESOS-1656

0

Đây là hành vi của Marathon, bởi vì nó có nghĩa là cho các dịch vụ chạy dài, càng sớm hoàn thành nhiệm vụ, Marathon giả định nó đã bị chấm dứt trong máy chủ đó và ngay lập tức nó sẽ gán một trường hợp mới cho chạy ứng dụng. Nếu bạn cần một trong những nhiệm vụ bạn có thể sử dụng Chronos, do đó, nó làm cho nhiệm vụ để chạy chỉ có một thời gian. Tôi đã viết một kịch bản để làm điều này tự động cho marathon.

start=$1 
end=$2 
for ((c=$start; c<=$end; c++)) 
do 

     echo "deleting:$c" 
     sleep 10 
     var=$(curl -X GET http://localhost:8080/v2/apps/docker-app-$c | grep "startedAt") 
     echo "$var" 
     if [[ $var == *"startedAt"* ]] 
     then 
      curl -X DELETE http://localhost:8080/v2/apps/docker-app-$c 
      echo "going to delete" 
     else 
       echo "application not started yet" 
     fi 

sleep 1 
done 
echo "Completed!" 
Các vấn đề liên quan