【问题标题】:How to install gulp on a docker with docker-compose如何使用 docker-compose 在 docker 上安装 gulp
【发布时间】:2015-10-23 07:45:17
【问题描述】:

我正在使用 docker compose,这是我的 yaml 文件

web:
  dockerfile: Dockerfile-dev
  build: .
  command: gulp
  volumes:
    - .:/app
  ports:
    - '9001:9001'

这是我的 docker 文件

FROM node:0.12.7

RUN npm install -g bower gulp

ADD . /app
WORKDIR /app

RUN bower install --allow-root

然后我跑

docker-compose -f docker-compose-dev.yml build
docker-compose -f docker-compose-dev.yml up

但我得到以下错误

Recreating web_web_1...
Attaching to web_web_1
web_1 | [07:39:08] Local gulp not found in /app
web_1 | [07:39:08] Try running: npm install gulp
web_web_1 exited with code 1
Gracefully stopping... (press Ctrl+C again to force)**strong text**

我尝试在 WORKDIR /app 之前和之后添加行 RUN npm install gulp 以在本地安装它,但我得到了同样的错误

帮助

【问题讨论】:

标签: docker gulp boot2docker dockerfile docker-compose


【解决方案1】:

您需要在WORKDIR /app 之后运行npm install gulp,以便将gulp 安装在本地node_modules/gulp 中。但是你已经这样做了并且有同样的错误。这是因为在您的 docker-compose-dev.yml 中,您将主机目录挂载为 docker 容器内的 /app。因此,当您运行容器时,/app 目录中的本地更改会丢失。

您可以从docker-compose-dev.yml 中删除卷或在主机中运行npm install gulp

【讨论】:

  • 这是正确的,非常感谢。我确实花了 1.5 天的时间来解决这个问题
  • 就是这样。删除 volumes 部分使容器运行。谢谢。
【解决方案2】:

您可以创建startup.sh

npm install bower gulp
bower install --allow-root

(或者当容器触发时你需要运行的任何东西)那么你的 Dockerfile 应该执行 startup.sh

...
CMD ["/startup.sh"]

启动脚本将在 docker-compose 挂载目录后执行。

我还建议将 node_modules 挂载在 docker-compose.yml 中声明的临时文件系统中:

volumes:
- .:/app
- /app/node_modules

【讨论】: