docker nofile 配置说明

参考docker nofile 配置说明 - 简书

Linux通过nofile配置来限制进程能够打开的文件句柄。Linux默认nofile配置为1024,在高并发场景下已经无法满足需求。因此,通常需要将docker容器的nofile配置修改得大一些。

1. docker nofile介绍

Linux上通过ulimit命令查看nofile,该命令实质上是从/proc/self/limits读取相关信息,所以在/proc/self/limits中我们也可以找到Max open files信息:

root@allen-laptop:~# cat /proc/self/limits 
Limit                     Soft Limit           Hard Limit           Units     
... ...   
Max processes             22813                22813                processes 
Max open files            1024                 4096                 files     
... ...

由于Linux内核已经将nofile纳入cgroup控制,因此docker的nofile与宿主机的nofile是相互独立的

例如,我在host机器上查看nofile:

root@allen-laptop:~# ulimit -n
1024

进入docker容器内,查看nofile:

root@allen-laptop:~# docker exec -it a44a6d87f9e9 /bin/bash
root@ubuntu-1:/# ulimit -n
524288

这意味着:我们修改宿主机上的nofile配置,实质上并不能影响docker容器内的nofile配置

  1. docker nofile配置
    针对docker不同的启动方式,nofile配置也不一样。

2.1 在docker默认配置文件中修改nofile配置
如果docker采用service docker start启动,那么docker将默认从/etc/init/docker.conf配置文件中获取nofile配置 :

root@allen-10:/home/allen# cat /etc/init/docker.conf
description "Docker daemon"

start on (filesystem and net-device-up IFACE!=lo)
stop on runlevel [!2345]
limit nofile 524288 1048576
limit nproc 524288 1048576

可看出,docker容器默认nofile默认配置为524288(软限制)和1048576(硬限制)。 如果我们使用service docker start ,那么docker启动时将读取这个nofile配置,并应用到该宿主机上启动的所有容器。

2.2 在docker daemon命令参数中修改nofile配置
如果通过docker daemon命令启动docker ,那么需在命令中加入”–default-ulimit nofile”配置并重启docker即可。如:

docker daemon --default-ulimit nofile=524288:1048576 --default-ulimit nproc=524288:1048576 --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} ${insecure_registries} --log-level=${DOCKER_LOG_LEVEL} --storage-driver=${STORAGE} >> $DOCKER_LOG_FILE 2>&1 &

 

您好!关于您提到的"docker.service: No such file or directory"错误,这通常是由于 Docker 服务未正确安装或配置所导致的。 首先,请确保您已经正确安装了 Docker。您可以通过运行以下命令来检查 Docker 是否已正确安装: ``` docker --version ``` 如果 Docker 已成功安装,您应该能够看到 Docker 版本号。 如果 Docker 还未安装,请按照适合您操作系统的步骤进行安装。Docker 官方网站提供了适用于各种操作系统的安装指南。 另外,如果您刚刚安装了 Docker 并且遇到了该错误,则可能是由于服务配置文件缺失导致的。在这种情况下,您可以尝试以下步骤: 1. 检查 `/etc/systemd/system/docker.service` 文件是否存在。如果文件不存在,则说明 Docker 服务配置文件确实缺失。 2. 在终端中创建一个新的 `docker.service` 文件,并输入以下内容: ``` [Unit] Description=Docker Application Container Engine Documentation=http://docs.docker.io [Service] ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target ``` 3. 将新创建的 `docker.service` 文件保存到 `/etc/systemd/system/docker.service` 路径中。确保文件权限设置正确(如:644)。 4. 运行以下命令重新加载 systemd 配置并启动 Docker 服务: ``` sudo systemctl daemon-reload sudo systemctl start docker ``` 5. 您还可以运行以下命令来检查 Docker 服务的状态: ``` sudo systemctl status docker ``` 如果一切正常,您应该能够看到 Docker 服务正在运行。 请注意,以上步骤中的路径和命令可能会因您的操作系统和 Docker 安装方式而略有不同。如果问题仍然存在,请提供更多详细信息,以便我能给出更具体的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值