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