2016-05-10 10 views
0

Я выполнил инструкции Саид Каземи по номеру docker suspend and resume using criu и использовал https://github.com/boucher/docker/tree/cr-defunct (на основе отзывов Росса Бушера), чтобы загрузить 1.10.0-dev из источника, чтобы получить функциональность контрольной точки/восстановления.восстановление докеров; Отсутствие указаний на go-dockerclient - FIXED

Теперь я пытаюсь работать с docker-proxy (github.com/edmodo/docker-proxy), который в свою очередь полагается на go-dockerclient (github.com/fsouza/go-dockerclient), чтобы получать указания по контейнерам и т. д.

. Мой вопрос более специфичен для базовых триггеров, которые демер-докер отправляет в go-dockerclient. Когда контейнеры создаются, запускаются или останавливаются, принимаются соответствующие индикаторы.

Однако, когда я использую восстановление, я не вижу того, что я надеялся увидеть. Возможно, я не полностью понимаю, как работает восстановление. Я побежал Docker демона в режиме отладки, чтобы увидеть, что происходит

я первый контрольно-пропускного пункта бегущую контейнер a1 в

docker checkpoint --image-dir=/tmp/ABC --leave_running a1 

Соответствующая отлаживать на демона был

DEBU[0036] Calling POST /v1.22/containers/a1/checkpoint 
DEBU[0036] POST /v1.22/containers/a1/checkpoint   
DEBU[0036] form data {"ImagesDirectory":"/tmp/ABC","LeaveRunning":true,"WorkDirectory":""} 
DEBU[0036] Using CRIU 20000 at: criu      
DEBU[0036] Using CRIU with following args: [swrk 3]  
DEBU[0036] Using CRIU in DUMP mode      
DEBU[0036] CRIU option ImagesDirFd with value 22 
<snip> .... I can paste this as well if needed   
DEBU[0036] CRIU option EmptyNs with value 1073741824 

Затем я создаю новый контейнер a2 как

docker create --name=a2 alpine-sshd 

Соответствующий журнал отладки для создания на демона был:

DEBU[0051] Calling POST /v1.22/containers/create   
DEBU[0051] POST /v1.22/containers/create?name=a2   
DEBU[0051] form data:{"AttachStderr":true,"AttachStdin":false,"AttachStdout":true,"Cmd":null,"Domainname":"","Entrypoint":null,"Env":[],"HostConfig":{"Binds":null,"BlkioDeviceReadBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceWriteIOps":null,"BlkioWeight":0,"BlkioWeightDevice":null,"CapAdd":null,"CapDrop":null,"CgroupParent":"","ConsoleSize":[0,0],"ContainerIDFile":"","CpuPeriod":0,"CpuQuota":0,"CpuShares":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"","Isolation":"","KernelMemory":0,"Links":null,"LogConfig":{"Config":{},"Type":""},"Memory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":-1,"NetworkMode":"default","OomKillDisable":false,"OomScoreAdj":0,"PidMode":"","PortBindings":{},"Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"RestartPolicy":{"MaximumRetryCount":0,"Name":"no"},"SecurityOpt":null,"ShmSize":null,"UTSMode":"","Ulimits":null,"VolumeDriver":"","VolumesFrom":null},"Hostname":"","Image":"alpine-sshd","Labels":{},"OnBuild":null,"OpenStdin":false,"StdinOnce":false,"StopSignal":"SIGTERM","Tty":false,"User":"","Volumes":{},"WorkingDir":""} 
ERRO[0051] Couldn't run auplink before unmount: exec: "auplink": executable file not found in $PATH 
DEBU[0051] container mounted via layerStore: /var/lib/docker/0.0/aufs/mnt/a02ad092a4ae9d0ae40f26a8457fe8379e63a8362444aedb6d41c67d34b2cb83 
ERRO[0051] Couldn't run auplink before unmount: exec: "auplink": executable file not found in $PATH 

На данный момент времени, создается a2 контейнер, но не работает. Это создание вызывает указание докеру, что контейнер создан, но не работает. docker ps -a и docker ps показаны два (a1 и a2) и один (a1) контейнеры соответственно; как и ожидалось.

После этого я восстановить a2 с контрольной точкой изображения, используя

docker restore --force=true --image-dir=/tmp/ABC a2 

Соответствующих отладки для восстановления было:

DEBU[0083] Calling POST /v1.22/containers/a2/restore  
DEBU[0083] POST /v1.22/containers/a2/restore?force=1  
DEBU[0083] form data {"ImagesDirectory":"/tmp/ABC","LeaveRunning":false,"WorkDirectory":""} 
DEBU[0083] container mounted via layerStore: /var/lib/docker/0.0/aufs/mnt/a02ad092a4ae9d0ae40f26a8457fe8379e63a8362444aedb6d41c67d34b2cb83 
DEBU[0083] Assigning addresses for endpoint a2's interface on network bridge 
DEBU[0083] RequestAddress(LocalDefault/172.17.0.0/16, <nil>, map[]) 
DEBU[0083] Assigning addresses for endpoint a2's interface on network bridge 
INFO[0083] No non-localhost DNS nameservers are left in resolv.conf. Using default external servers : [nameserver 8.8.8.8 nameserver 8.8.4.4] 
INFO[0083] IPv6 enabled; Adding default IPv6 external servers : [nameserver 2001:4860:4860::8888 nameserver 2001:4860:4860::8844] 
DEBU[0083] Using CRIU 20000 at: criu      
DEBU[0083] Using CRIU with following args: [swrk 3]  
DEBU[0083] Using CRIU in RESTORE mode     
DEBU[0083] CRIU option ImagesDirFd with value 29   
<snip>.... I can paste this if needed 
DEBU[0083] CRIU option EmptyNs with value 1073741824 

Это запускает контейнер. Однако никакой вид индикатора не видно через демона на доклерку. Оба контейнера работают нормально.

Это отсутствие указания по дизайну? Есть ли другой способ, с помощью которого можно запустить триггер запуска контейнера? Я должен копать глубже в go-dockerclient, чтобы увидеть, нет ли там чего-то там.

Любая помощь будет очень признательна.Заранее спасибо

ответ

0

Этой ветвь представляет собой последнюю рабочую версию грузчика с контрольной точкой восстановления: https://github.com/boucher/docker/tree/cr-defunct

Там также предкомпилированная версия: https://github.com/boucher/docker/releases/tag/v1.10_2-16-16-experimental

Я считаю, что, хотя «старт» событие не срабатывает , демон должен быть запущен.

+0

Я буду следить за инструкциями по http://superuser.com/questions/484671/can-i-monitor-a-local-unix-domain-socket-like-tcpdump, связанным с socat, чтобы посмотреть, могу ли я смотреть в то, что именно происходит на /var/run/docker.sock. Возможно, проблема в go-dockerclient заключается в том, что она не обрабатывает все индикаторы. – userVK

+0

ОК. Оказывается, я испортил обновления, которые я сделал для docker-proxy, чтобы обнаружить эти индикаторы. go-dockerclient работает безупречно (спасибо fsouza !!), и моих надлежащих изменений в докере-прокси было достаточно, чтобы получить индикаторы. Я могу получить «контрольную точку» и «восстановить» события, когда эти действия будут предприняты. Я согласен с ответом Росса, так как он указал, что это именно то, что произойдет, и также указал мне на правильное c/r repo и branch – userVK