CreateContainer с внутренним мьютексом - PullRequest
0 голосов
/ 05 января 2019

У меня есть некоторый код Go, с помощью которого я создаю и запускаю Docker-контейнеры через go-docker-sdk. Возможны ситуации, связанные с воспроизведением SQS и другими причинами, из-за которых запрос на создание может выполняться несколько раз. Чтобы защититься от этого, я сделал что-то вроде следующего:

mutex.lock()
defer mutex.unlock()
//Make docker sdk call to **GET** containers with say image name "name1"
// If "name1" does not exist, **CREATE** a container with image "name1"

У меня есть модульный тест, который пытается развернуть контейнер с данным именем изображения, скажем, 20 раз. Ожидается, что 19 звонков должны потерпеть неудачу, и только один должен быть успешным. Тест проходит в основном, но время от времени происходит менее 19 вызовов, что означает, что более одного вызова успешно. Я не уверен, почему двигатель докера ведет себя так. Вызовы GET и CREATE блокируют вызовы в SDK, и, поскольку я делаю это в мьютексе, все это естественно сериализуется. Есть идеи, почему движок докера делает это? "

...