这是如何在 DDEV Web 容器中添加和使用 nvm 的后续内容?
我的 docker 文件现在看起来像这样:
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
最后一行返回错误: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
时,它会完成工作(在foundation-src
文件夹中运行纱线(。
我也尝试过RUN (cd foundation-src; yarn install;)
但也没有运气。无论如何,我更喜欢第一个命令。但是这是怎么回事呢?为什么我可以从容器内部运行内容,但不能从 dockerfile 运行内容?
你的命令是RUN yarn --cwd foundation-src install
- 它假设当前目录下有一个子目录"foundation-src"。
但是 Dockerfile 运行了很长时间,很久很久以前,您的源就已经有用了。容器尚未运行,未挂载任何内容。因此,您不能执行需要存在源代码的操作。
由于此命令似乎需要您的源代码存在,因此我认为您最好将其作为启动后钩子,也许
hooks:
post-start:
- exec: "yarn --cwd foundation-src install"
由于像yarn install
这样的操作是不定期发生的,因此也很容易ddev exec yarn --cwd foundation-src install
,也很容易创建自定义命令来在需要时执行此操作。