Я выполнил инструкции Саид Каземи по номеру 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, чтобы увидеть, нет ли там чего-то там.
Любая помощь будет очень признательна.Заранее спасибо
Я буду следить за инструкциями по http://superuser.com/questions/484671/can-i-monitor-a-local-unix-domain-socket-like-tcpdump, связанным с socat, чтобы посмотреть, могу ли я смотреть в то, что именно происходит на /var/run/docker.sock. Возможно, проблема в go-dockerclient заключается в том, что она не обрабатывает все индикаторы. – userVK
ОК. Оказывается, я испортил обновления, которые я сделал для docker-proxy, чтобы обнаружить эти индикаторы. go-dockerclient работает безупречно (спасибо fsouza !!), и моих надлежащих изменений в докере-прокси было достаточно, чтобы получить индикаторы. Я могу получить «контрольную точку» и «восстановить» события, когда эти действия будут предприняты. Я согласен с ответом Росса, так как он указал, что это именно то, что произойдет, и также указал мне на правильное c/r repo и branch – userVK