【问题标题】:Docker- parent image for Node.js based ImagesDocker- 基于 Node.js 的图像的父图像
【发布时间】:2019-10-10 21:28:28
【问题描述】:

我正在尝试创建一个基于 Node.js 的 docker 映像。为此,我正在寻找Parent image 的选项。安全性是镜像中的主要考虑因素之一,我们希望通过不允许容器中的 shell 或 bash 来强化镜像。

Google Distroless 确实提供了此选项,但 Distroless-NodeJS 处于实验阶段,不建议用于生产。

我能想到的可能选项是(妥协 Distroless 功能):

话虽如此,

  • Distroless 有什么替代品吗?

  • 对于基于 Node.js 的 docker 映像的父映像的最佳选择是什么?

任何指针都会有所帮助。

【问题讨论】:

    标签: node.js docker dockerfile


    【解决方案1】:

    一种选择是从满足您要求的节点映像开始,然后删除您不想要的任何内容(sh、bash 等)

    在极端情况下,您可以将以下内容添加到 Dockerfile:

    RUN /bin/rm -R /bin/*
    

    虽然我不确定这不会干扰节点的运行。

    在官方节点图像(不包括 Apline)上,您有 /bin/bash/bin/dash/bin/sh(指向 /bin/dash 的符号链接)。只需删除这 3 只苍蝇就足以阻止 shell 访问。

    Alpine 版本有一个符号链接/bin/sh -> /bin/busybox。您可以删除此符号链接,但如果没有busybox,它可能无法运行。

    【讨论】:

      【解决方案2】:

      我认为您可以从头开始构建仅包含您的节点应用程序和所需依赖项的映像,甚至没有 ls or pwd 等。

      FROM node as builder
      
      WORKDIR /app
      
      COPY . ./
      
      RUN npm install --prod
      
      FROM astefanutti/scratch-node
      
      COPY --from=builder /app /app
      WORKDIR /app
      ENTRYPOINT ["node", "bin/www"]
      
      

      scratch-node

      因此,如果有人试图获得外壳,例如,

      docker run --entrypoint bash -it my_node_scratch
      
      

      会报错

      docker:来自守护进程的错误响应:OCI 运行时创建失败: container_linux.go:348:启动容器进程导致“exec: \"bash\": 在 $PATH" 中找不到可执行文件:未知。

      【讨论】:

        【解决方案3】:

        我指的是官方 Node.js docker 镜像。 在您的项目中创建一个 docker 文件。 然后构建并运行 docker 镜像:

        docker build - t test-nodejs-app
        docker run -it --rm --name running-app test-nodejs-app
        

        如果你更喜欢 docker compose:

        Version: "2"
        
        Services:
            node:
               image: "node:8"
               user: "node"
               working_dir: /home/node/app
               environment:
                  - NODE_ENV=production
               volumes:
                  - ./:/home/node/app
               expose:
                  - "8081"
               command: "npm start"
        

        运行撰写文件:

        docker-compose up -d
        

        【讨论】:

          猜你喜欢
          • 2019-04-24
          • 2016-07-25
          • 1970-01-01
          • 1970-01-01
          • 2017-08-05
          • 2013-09-29
          • 1970-01-01
          • 2019-09-19
          相关资源
          最近更新 更多