gpt4 book ai didi

docker - 在 Docker 文件中运行命令

转载 作者:IT王子 更新时间:2023-10-29 06:09:39 26 4
gpt4 key购买 nike

当我在我的 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) 手册:

   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 中的其他内核参数可能会被继承(尽管其他的不会),因此您应该在主机上设置它们。

关于docker - 在 Docker 文件中运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43802123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com