Я хотел бы установить размер буфера UDP для контейнера докера.Хотя размер буфера UDP является настройкой, относящейся к ядру, и соответствует настройке хоста, я вижу, что не вижу настройки моего хоста размера буфера, влияющего на мой контейнер.
Вотчто я пробовал:
на хосте
sysctl -w net.core.rmem_default = 4194304
sysctl -w net.core.rmem_max = 4194304
и для проверки ( на хосте )
sysctl net.core.rmem_default
net.core.rmem_default = 4194304
sysctl net.core.rmem_max
net.core.rmem_max = 4194304
Но когда я бегу в контейнере (скажем, в альпийском).
docker run -it alpine
и в альпийском пепле
sysctl net.core.rmem_default
sysctl: error: 'net.core.rmem_default' is an unknown key
То же самое происходит с rmem_max
также.
Однако, к моему удивлению, я вижу
sysctl net.core.rmem_default
net.core.somaxconn = 128
. Я могу установить вышеупомянутое в Docker-контейнере, используя аргумент --sysctl
.
docker run -it --sysctl net.core.somaxconn=125 alpine
/ # sysctl net.core.somaxconn
net.core.somaxconn = 125
Но мне нужны размеры rmem_default
и rmem_max
.
Если эта опция не указана с помощью флага --sysctl
и что настройка зависит от хост-машины, то
Как я могу доказать, что размер буфера в контейнере такой же, как у хоста?
Более того, во время многих тестов я узнал, что пакеты отбрасываются (ядумаю, это из-за некоторого установленного небольшого размера буфера).
Я также пытался записать в /proc/sys/net/core/rmem_default
в контейнере, но получил , не может быть ошибка статистики .Я не понял, почему нет такого файла как rmem_default
и тому подобного (rmem_max
и т. Д.), Который находится на хосте в докере /proc
.
Я слышал, что хост /proc
устанавливается на контейнер.Это правда?Кажется, он не рассматривает описанный выше сценарий.
Кроме того, редактирование sysctl.conf
и вызов sysctl -p
также не помогли.
Не стесняйтесь перенести этот вопрос в Unix.stackexchange.com, если в этом есть смысл.