2.6Kпросмотров
42.9%от подписчиков
8 марта 2026 г.
Score: 2.8K
Меняем смонтированный с RO файл без остановки контейнера На хосте запущен consul через docker run с монтированием цепочки сертификатов
--volume /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro Когда на хосте утилита обновления сертификатов update-ca-certificates отработала, она удалила старый файл ca-certificates.crt и создала новый.
Но внутри контейнера старый файл был примонтирован. В терминологии ядра Linux этот bind-mount превратился в призрак (unlinked inode). Нам нужно сначала "отмонтировать" этот мертвый файл-призрак. И вот поверх него мы сможем успешно смонтировать новый сертификат. # получить первый PID контейнера на хосте
PID=$(docker inspect -f '{{.State.Pid}}' consul) # Скопировать файл в контейнер
docker cp /etc/ssl/certs/ca-certificates.crt consul:/tmp/new-ca.crt # Отмонтировать старый inode (удаленный файл) из namespace контейнера
nsenter -t $PID -m -r umount -l /etc/ssl/certs/ca-certificates.crt # Примонтировать nsenter -t $PID -m -r mount --bind -o ro /tmp/new-ca.crt /etc/ssl/certs/ca-certificates.crt Дальше можно перечитать конфиг consul.
это все равно не помогло, пришлось рестартить consul😐