web-dev-qa-db-ja.com

dockerコンテナにulimit /ファイル記述子を設定する方法画像タグはphusion / baseimage-dockerです

Sshでコンテナーに接続するdockerコンテナーにファイル記述子の制限を正しく設定する必要があります( https://github.com/phusion/baseimage-docker

すでに試した:

  • コンテナがこのファイルを無視する場合、limits.confを編集します
  • https://coderwall.com/p/myodcq にあるupstartプロシージャですが、このdockerイメージには異なる種類のinitプロセスがあります。 (それを実行します)
  • /etc/pam.dのpamライブラリの構成を変更しようとしました
  • sshd_configでsshのpamを有効にしてみてください

出力は常に同じです。

bash: ulimit: open files: cannot modify limit: Operation not permitted
34
dnocode

最新のdockerは、コマンドラインおよびAPIを介したulimitの設定をサポートしています。例えば、 docker run--ulimit <type>=<soft>:<hard>そして、あなたが好きなだけこれらの多くがあることができます。したがって、nofileの例は--ulimit nofile=262144:262144

41
Glenn

いくつかの検索の後、Googleグループのディスカッションでこれを見つけました。

dockerは現在、この機能を禁止して安全性を高めています。

これは、ホストシステムのulimit設定がdockerコンテナに適用されるためです。コンテナで実行されているプログラムがホストのulimit設定を変更できることは、セキュリティ上のリスクと見なされます。

良いニュースは、選択できる2つの異なるソリューションがあることです。

  1. 削除する sys_resource from lxc_template.goおよびdockerを再コンパイルします。その後、ulimitを好きなだけ高く設定できます。

または

  1. Dockerデーモンを停止します。ホストのulimit設定を変更します。 Dockerデーモンを起動します。これで制限が変更され、子プロセスも同様になりました。

2番目の方法を適用しました。

  1. Sudo service docker stop;

  2. / etc/security/limits.confの制限を変更しました

  3. マシンを再起動します

  4. コンテナを実行します

  5. 実行ulimit -a開いているファイルの制限が継承されていることを確認するためのコンテナ内。

参照: https://groups.google.com/forum/#!searchin/docker-user/limits/docker-user/T45Kc9vD804/v8J_N4gLbacJ

26
dnocode

私は多くのオプションを試してみましたが、なぜ上記のいくつかの解決策が1台のマシンで機能し、他のマシンでは機能しないのかはわかりません。

機能し、シンプルで、コンテナごとに機能するソリューションは次のとおりです。

docker run --ulimit memlock=819200000:819200000 -h <docker_Host_name> --name=current -v /home/user_home:/user_home -i -d -t docker_user_name/image_name
7
Kabeer Ahmed

実際、上記の答えを試しましたが、うまくいかないようでした。

コンテナにulimitの変更を認識させるには、開始する前にdocker.confファイルを更新する必要がありました。

$ Sudo service docker stop
$ Sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf"
$ Sudo service docker start
4
orcaman

これが私がしたことです。

ファイル/etc/init.d/dockerに_ulimit -n 32000_を設定します

dockerサービスを再起動します

_docker run -ti node:latest /bin/bash_

このコマンドを実行して確認します

_user@4d04d06d5022:/# ulimit -a_

結果にこれが表示されるはずです

open files (-n) 32000

_[user@ip ec2-user]# docker run -ti node /bin/bash
user@4d04d06d5022:/# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 58729
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 32000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 58729
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
_
3
Jay

docker runコマンドには--ulimitフラグこのフラグを使用して、Dockerコンテナで開くファイルの制限を設定できます。

コンテナをスピンアップするときに次のコマンドを実行して、開いているファイルの制限を設定します。

docker run --ulimit nofile=<softlimit>:<hardlimit>コロンの前の最初の値はソフトファイルの制限を示し、コロンの後の値はハードファイルの制限を示します。これを確認するには、コンテナをインタラクティブモードで実行し、コンテナで次のコマンドを実行しますShell ulimit -n

PS:これを確認してください ブログ より明確にするために投稿してください

1
Rifhan Akram

Boot2dockerの場合、/var/lib/boot2docker/profile、 例えば:

ulimit -n 2018

Apt-getの速度が低下するため、この制限を高く設定しすぎないように注意してください!バグ #133244 を参照してください。 debian jessieと一緒に食べました。

0
neofreko