Although its a little bit late, I just want to clear the doubts about the difference in ulimit.
If you do net set the value when running the container, the ulimit value displayed within the container comes from the host OS. The question is then why are you seeing a different value when running the same command from the host?
This is because when running the command in the host, it is showing its soft limit. On the other hand, the value that the container is showing is the hard limit of the host OS. The reason for this is you are allowed to cross the soft limit. So in a sense, hard limit is actually the real limit. You can find more about ulimit in this link.
To see the hard limit just type the following command
ulimit -Hn
You will see that the values match.
N.B. You can not cross the hard limit but you can increase it if you are the root.
Limits on open files can be set in the Docker configuration using LimitNOFILE
, or they can be passed to the docker run
command:
$ docker run -it --ulimit nofile=1024:2048 ubuntu bash -c 'ulimit -Hn && ulimit -Sn'
2048
1024
See here for elaboration on setting ulimits in Docker.
Note that this limit can be set higher than the OS's hard limit, which can cause trouble.