运行 来自 ddev 中 Dockerfile 的纱线

Run yarn from Dockerfile in ddev

这是 How can I add and use nvm in a DDEV web container?

的后续

我的 dockerfile 现在看起来像这样:

ARG BASE_IMAGE
FROM $BASE_IMAGE

ENV NVM_DIR=/usr/local/nvm
ENV NODE_DEFAULT_VERSION=v8.16.1

RUN curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh -o install_nvm.sh
RUN mkdir -p $NVM_DIR && bash install_nvm.sh
RUN echo "source $NVM_DIR/nvm.sh" >>/etc/profile
RUN bash -ic "nvm install $NODE_DEFAULT_VERSION && nvm use $NODE_DEFAULT_VERSION"
RUN chmod -R ugo+w $NVM_DIR
RUN npm install -g foundation-cli
RUN npm install -g gulp-cli
RUN yarn --cwd foundation-src install

最后一行returns出错:Service 'web' failed to build: The command '/bin/sh -c yarn --cwd foundation-src install' returned a non-zero code: 1'

当我 ddev ssh 然后 运行 yarn --cwd foundation-src install 它完成了工作(运行ning 纱线在 foundation-src 文件夹中)。

我也试过 RUN (cd foundation-src; yarn install;) 但也没成功。无论如何,我更喜欢第一个命令。但这是怎么回事?为什么我可以 运行 从容器内部而不是 dockerfile 中获取东西?

你的命令是RUN yarn --cwd foundation-src install——假设当前目录下有一个子目录"foundation-src"。

但是 Dockerfile 是 运行ning 很长,远在您的源代码可用之前。容器还没有 运行,没有安装任何东西。所以你不能做需要你的源代码存在的事情。

由于此命令似乎需要您提供源代码,我认为您最好以 post-start hook 的形式执行此操作,也许

hooks:
  post-start:
    - exec: "yarn --cwd foundation-src install"

由于像 yarn install 这样的操作不定期发生,因此 ddev exec yarn --cwd foundation-src install 也很容易创建自定义命令来在需要时执行此操作。