redis 在docker-compose up时配置主机

gblwokeq  于 7个月前  发布在  Redis
关注(0)|答案(1)|浏览(99)

情况

所以我读到一个最佳的redis配置会对主机这样做(具体细节并不重要,这只是一个例子,见下文):
1.增加连接数
1.允许过量使用内存
1.停用透明巨型表
通常在shell中的主机系统上,我会简单地这样做:

sudo sysctl net.core.somaxconn=1024
sudo sysctl vm.overcommit_memory=1
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled  # includes workaround as sudo echo doen't work

字符串
然后,您将有不同的命令来确保这些设置在重新启动等情况下仍然存在。

问题

我想确保当我docker-compose时,所有这些设置都是在主机上进行的。我希望在docker compose文件中有这些设置,所以我不必开始管理主机(直到现在)。

我一直在努力

我尝试将设置添加到docker-compose-file中,如下所示:

redis:
    image: redis:latest
    sysctls:
      - net.core.somaxconn=1024
      - sysctl vm.overcommit_memory=1
    command: bash -c "redis-server --appendonly yes"


这适用于第一个设置,但对于第二个设置,我得到了错误

Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: sysctl "vm.overcommit_memory" is not in a separate kernel namespace: unknown


我见过提升docker容器权限的解决方案,但对我来说,这会破坏你通过docker所拥有的安全性。
有没有人有一个安全和智能的解决方案?也许以某种方式做一个单独的容器,只执行一个bash脚本作为sudo?提前谢谢你。

lymgl2op

lymgl2op1#

根据这里的文档:
并不是所有的sysctl都是命名空间的。Docker不支持在容器内修改sysctl,这也会修改主机系统。随着内核的发展,我们希望看到更多的sysctl成为命名空间。
当前支持的sysctls
IPC运行空间:

  • kernel.msgmaxkernel.msgmnbkernel.msgmnikernel.semkernel.shmallkernel.shmmaxkernel.shmmnikernel.shm_rmid_forced
  • 以fs. mccee开头的sysctl。* 如果您使用--ipc=host选项,则不允许使用这些sysctl。

网络带宽:

  • net.*开头的系统
  • 如果使用--network=host选项,则不允许使用这些sysctl。

一个可能的解决方案是创建一个脚本,将其合并到您的映像或容器中,并在启动时运行它,仅此而已。

相关问题