我正在尝试制作我的第一个 dockerfile(我是新手),我需要系统运行命令 sysctl -w kernel.randomize_va_space=0
(它是一个实验室环境。),但我收到错误:
sysctl: setting key "kernel.randomize_va_space": Read-only file system
FROM avatao/lesp:ubuntu-14.04
USER root
COPY ./solvable/ /
RUN sysctl -w kernel.randomize_va_space=0
VOLUME ["/tmp"]
EXPOSE 2222
WORKDIR /home/user/
USER user
CMD ["/usr/sbin/sshd", "-Df", "/etc/ssh/sshd_config_user"]
最佳答案
由于 Docker 容器共享主机系统的内核及其设置,因此 Docker 容器通常无法运行 sysctl
根本。 (尤其不能像这样禁用安全关键设置。)您可以使用 docker run --sysctl
在容器本地基础上设置有限数量的 sysctl。 ,但你提到的不是其中之一。
此外,您也不能在 Dockerfile 中强制进行这样的更改。一个 Docker 镜像只包含一个文件系统和一些相关的元数据,而不包含任何正在运行的进程或主机系统设置。即使这个RUN sysctl
工作,如果您重新启动系统然后从镜像启动容器,则该设置将丢失。
鉴于您在此 Dockerfile 中显示的内容——定制的 Linux 内核设置、没有运行特定的应用程序、作为容器进程的开放式 ssh 守护进程——您可能会考虑虚拟机是否更适合您的需求。您可以使用类似 Packer 的工具以与 Dockerfile 构建 Docker 镜像大致相同的方式可重现地构建 VM 镜像。由于 VM 确实具有隔离内核,因此您可以运行该 sysctl
命令那里,它会工作,也许通过正常的完整 Linux 安装方法,如 /etc/sysctl.conf
文件。
https://stackoverflow.com/questions/54845095/