如何将 gatsby-cli 或 sudo 或其他包添加到像 nodejs 这样的 DDEV-Local 附加服务?

How can I add gatsby-cli or sudo or other packages to a DDEV-Local add-on service like nodejs?

我正在使用单独的 nodejs 容器,如 How to use a separate node container in your ddev setup?,但我真的很想将 gatsby-cli npm 包添加到其中,并且可能还会添加 sudo。我知道如何将自定义 Dockerfile 添加到 Web 服务并执行这些操作,但如何使用自定义服务执行此操作?

您可以执行与 ddev 相同的操作来添加自定义 Docker 文件,并添加 build 节和包含所需文件的 .ddev/<servicename>-build 目录。

所以对于 .ddev/docker-compose.node.yaml 文件:

version: '3.6'
services:
  node:
    build:
      context: "${DDEV_APPROOT}/.ddev/node-build"
      dockerfile: "${DDEV_APPROOT}/.ddev/node-build/Dockerfile"
      args:
        BASE_IMAGE: "node"
    image: "node-${DDEV_SITENAME}-built"

    user: "node"
    restart: "no"
    labels:
      com.ddev.site-name: ${DDEV_SITENAME}
      com.ddev.platform: ddev
      com.ddev.app-type: php
      com.ddev.approot: $DDEV_APPROOT
    volumes:
    - "../:/var/www/html:cached"
    working_dir: /var/www/html
    command: ["tail", "-f", "/dev/null"]

然后 mkdir .ddev/node-build 并创建 .ddev/node-build/Dockerfile 和

ARG BASE_IMAGE
FROM $BASE_IMAGE

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::="--force-confold" --no-install-recommends --no-install-suggests bash sudo
COPY sudoers.d/ddev /etc/sudoers.d
RUN npm install -g gatsby-cli

和.ddev/node-build/sudoers.d/ddev和

ALL ALL=NOPASSWD: ALL

在这种情况下,结果是您通过 npm 安装了 gatsby-cli,还安装了 bash 和无密码 sudo。这只是一个例子,当然还有很多可以做的。

这省去了创建和维护自定义 Docker 图像并将其推送到 hub.docker.com 的麻烦。