Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Docker文件中运行命令_Docker_Redis_Dockerfile - Fatal编程技术网

在Docker文件中运行命令

在Docker文件中运行命令,docker,redis,dockerfile,Docker,Redis,Dockerfile,当我在Docker文件中包含以下命令时,我得到了一个错误。我正在尝试创建一个docker文件,用于为Redis创建我的基本映像,此命令有助于提高Redis的性能 RUN echo 4096 > /writable-proc/sys/net/core/somaxconn 当我尝试构建docker文件以创建图像时,我遇到的错误是: /bin/sh: 1: cannot create /writable-proc/sys/net/core/somaxconn: Directory nonexi

当我在Docker文件中包含以下命令时,我得到了一个错误。我正在尝试创建一个docker文件,用于为Redis创建我的基本映像,此命令有助于提高Redis的性能

RUN echo 4096 > /writable-proc/sys/net/core/somaxconn
当我尝试构建docker文件以创建图像时,我遇到的错误是:

/bin/sh: 1: cannot create /writable-proc/sys/net/core/somaxconn: Directory nonexistent
关于如何运行此命令,有什么建议吗?实际上,我希望在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 run(1)手册:

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


procfs和sysfs中的其他内核参数可能会被继承(尽管其他参数不是),因此您应该在主机上设置它们。

您是否尝试将其作为特权运行?尝试运行基本映像并检查目录/writable proc/sys/net/core/exists是否存在?否则,请先创建该目录,然后再添加文件和文本。发布完整的Dockerfile可能会有所帮助。否则,这是一场猜谜游戏。我猜你在
echo
之前打电话给
USER something
…我已经添加了整个Dockerfile。谢谢Ricardo。成功了。如何对“echo”vm.overmit\u memory=1'>>/etc/sysctl.conf”和“echo never>/sys/kernel/mm/transparent\u hugepage/enabled”执行类似操作?请尝试在主机中设置它们,以查看这些参数是否被继承。作为最后的手段,我将尝试在特权模式下运行容器(可能禁用apparmor/selinux&seccomp)。还可以尝试Docker的最新版本,并告诉我们结果。我在Docker论坛上发现了很多关于这个话题的讨论。显然,这是不可能做到的,如果您在主机级别这样做,它“可能”应用于该主机上的所有docker容器。我想我可以在容器中手动运行这些命令。谢谢你,里卡多。
   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.