Ubuntu – How to set max file descriptors for a container

containerselasticsearchUbuntuulimit

I want to run elasticsearch in a container (namely nspawn) and it requires the number of max file descriptors to be higher than the default 1024.

This is done, in the container, in the systemd service file appropriate for elasticsearch. This request upon service start is however not taken into account, the limit stays at 1024.

I then tried to change this limit on the command line within the container but I believe this is not possible (which is understandable):

root@elk:/etc/elasticsearch# ulimit -n 65536
-bash: ulimit: open files: cannot modify limit: Operation not permitted

I believe that this limit should be either set, or allowed to be set, at the host level. Where should I set this up?

Best Answer

A bug report for systemd gave the solution. One needs to create or update /etc/systemd/system/systemd-nspawn@.service.d/ulimit.conf and add LimitNOFILE=infinity in the [Service] section:

mkdir -p /etc/systemd/system/systemd-nspawn@.service.d/
cat <<'EOF' >/etc/systemd/system/systemd-nspawn@.service.d/ulimit.conf
[Service]
LimitNOFILE=infinity
EOF
systemctl daemon-reload
systemctl stop systemd-nspawn@CONTAINER
systemctl start systemd-nspawn@CONTAINER