在Docker文件中运行命令

当我在我的Docker文件中包含以下命令时,出现错误。 我正在尝试创build一个用于为Redis创build基础映像的docker文件,并且此命令有助于实现redis性能。

RUN echo 4096 > /writable-proc/sys/net/core/somaxconn 

当我尝试构builddocker文件以创build映像时,出现的错误是:

 /bin/sh: 1: cannot create /writable-proc/sys/net/core/somaxconn: Directory nonexistent 

任何build议如何我可以运行此命令? 我真的想在我的Dockerfile中运行以下命令:

 RUN echo 4096 > /writable-proc/sys/net/core/somaxconn RUN echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf RUN echo never > /sys/kernel/mm/transparent_hugepage/enabled 

以下是我的Redis镜像的整个Docker文件:

 #Download base image ubuntu 16.04 FROM ubuntu:14.04 MAINTAINER George Chilumbu ENV HOME /root ENV DEBIAN_FRONTEND noninteractive #ENV /writable-proc/sys/net/core/somaxconn /proc:/writable-proc # Set the working directory to /app WORKDIR ~/ # Redis Cache Server Tuning RUN mkdir -p /writable-proc/sys/net/core/somaxconn RUN echo 4096 > /writable-proc/sys/net/core/somaxconn #RUN echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf #RUN echo never > /sys/kernel/mm/transparent_hugepage/enabled # Install some necessary software/tools RUN apt-get update && apt-get install -y \ wget \ vim \ unzip \ inetutils-ping \ inetutils-tools \ net-tools \ dnsutils \ software-properties-common \ python-software-properties \ ntp \ rsyslog \ curl RUN add-apt-repository ppa:gaod/redis-server \ && apt-get update \ && apt-get install -y redis-server \ redis-sentinel \ && rm /etc/redis/redis.conf \ && rm /etc/redis/sentinel.conf RUN mkdir -p /opt/redis/redis_dump RUN chown redis:redis -R /opt/redis/redis_dump/ 

设置sysctl只能在运行时使用–sysctl选项。 从docker运行(1)手册:

  Configure namespaced kernel parameters at runtime IPC Namespace - current sysctls allowed: kernel.msgmax, kernel.msgmnb, kernel.msgmni, kernel.sem, kernel.shmall, kernel.shmmax, kernel.shmmni, kernel.shm_rmid_forced Sysctls beginning with fs.mqueue.* If you use the --ipc=host option these sysctls will not be allowed. Network Namespace - current sysctls allowed: Sysctls beginning with net.* If you use the --network=host option these sysctls will not be allowed. 

例如,对于/ proc / sys / net / core / somaxconn,你可以使用--sysctl net.core.somaxconn=4096

procfs和sysfs中的其他内核参数可以被inheritance(尽pipe其他的参数不是),所以你应该在主机上设置它们。