运行 来自 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
也很容易创建自定义命令来在需要时执行此操作。
这是 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
也很容易创建自定义命令来在需要时执行此操作。