Этим утром я написал небольшую тестовую программу Python, которая просто записывает в файл миллион последовательных целых чисел с блокировкой flock (), получая и снимая блокировку один раз для каждого добавленного числа. Я запустил 5 контейнеров, каждый из которых запускал эту тестовую программу, и каждый записывал один и тот же файл на томе докера.
С включенной блокировкой все числа были записаны без взаимного влияния, и в файле было ровно 5 миллионов целых чисел. Они не были последовательными, когда написаны таким образом, но это ожидается и согласуется с работой flock ().
Без блокировки многие из чисел были записаны таким образом, что это указывает на то, что числа шли вразрез с блокировкой многозадачности без блокировки. В файле было только 3 167 546 номеров и 13 357 пустых строк. Это составляет в общей сложности 3 180 903 строки в файле, что существенно отличается от требуемых 5 000 000.
Хотя программа не может окончательно доказать, что никогда не возникнет проблем, просто много раз тестируя, для меня это довольно убедительный аргумент, что Linux flock () работает через контейнеры.
Кроме того, просто имеет смысл, что flock будет работать через контейнеры; контейнеры - это всего лишь общее ядро, отдельный pid, отдельный файл (кроме томов) и отдельное пространство IP-порта.
Я провел свой тест на системе Linux Mint 19.1 с ядром Linux 4.15.0-20-generic, Docker 19.03.0 - сборка aeac949 и CPython 3.6.8.
Go - классный язык, но почему flock () не работает на томах в вашей программе Go, я не знаю.
НТН.