我正在使用 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**
我尝试在
RUN npm install gulp
之前和之后添加行 WORKDIR /app
以将其安装在本地,但我收到相同的错误
帮助
您需要在npm install gulp
运行
WORKDIR /app
,以便在node_modules/gulp
中本地安装gulp。但你已经这样做了并且犯了同样的错误。这是因为在您的 docker-compose-dev.yml
中,您正在将主机目录安装为 docker 容器中的 /app
卷。因此,当您运行容器时, /app 目录中的本地更改将会丢失。
您可以从
docker-compose-dev.yml
中删除卷或在主机中运行 npm install gulp
。
您可以创建
startup.sh
npm install bower gulp
bower install --allow-root
(或者容器启动时需要运行的任何内容)那么你的 Dockerfile 应该执行startup.sh
...
CMD ["/startup.sh"]
启动脚本将在 docker-compose 挂载目录后执行。
我还建议在 docker-compose.yml 中声明的临时文件系统中挂载node_modules:
volumes:
- .:/app
- /app/node_modules
致未来的谷歌用户:
检查生产环境是否没有Node镜像。这是行不通的,你会讨厌生活。
为了让 gulp 工作,你应该像这样设置开发环境:
FROM node:latest AS build
ENV NODE_ENV=development