我正在尝试制作我的第一个dockerfile(这是我的新手),并且我需要系统运行sysctl -w kernel.randomize_va_space=0命令(它是一个实验室环境),但出现错误:



每当我尝试构建dockerfile时,有什么建议如何解决?

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 在容器本地基础上设置数量有限的sysctls,但是您提到的那个不是其中之一。

此外,您也不能在Dockerfile中强制进行此类更改。 Docker镜像仅包含文件系统和一些关联的元数据,而不包含任何正在运行的进程或主机系统设置。即使此RUN sysctl有效,如果您重新启动系统然后从镜像启动容器,该设置也会丢失。

鉴于您在此Dockerfile中显示的内容-自定义的Linux内核设置,没有运行特定的应用程序,无限制的ssh守护程序作为容器进程-您可能会考虑虚拟机是否更适合您的需求。您可以使用Packer之类的工具以可重复的方式生成VM镜像,就像Dockerfile生成Docker镜像一样。由于虚拟机确实具有隔离的内核,因此您可以在其中运行该sysctl命令,并且可以通过常规的完整Linux安装方法(例如/etc/sysctl.conf文件)运行该命令。

关于docker - 无法在Dockerfile中运行sysctl命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54845095/

10-08 22:17