我有一个从docker-compose.yml指向的Dockerfile。
我希望将docker-compose.yml中的卷挂载在Dockerfile中之前进行RUN。
RUN
Dockerfile:
FROM node WORKDIR /usr/src/app RUN npm install --global gulp-cli \ && npm install ENTRYPOINT gulp watch
docker-compose.yml
version: '2' services: build_tools: build: docker/gulp volumes_from: - build_data:rw build_data: image: debian:jessie volumes: - .:/usr/src/app
首先执行Dockerfile,然后从docker-compose挂载是完全有意义的,但是有一种解决方法。
我想保持Dockerfile通用,同时从compose传递更多特定位。也许这不是最佳做法?
埃里克·丹嫩伯格(ErikDannenberg)的观点是正确的,体积分层意味着我试图做的事情没有任何意义。(如果您想了解更多信息,那么在Docker网站上还有另一个非常好的解释)。如果我想让Docker做,npm install那么我可以这样做:
npm install
FROM node ADD . /usr/src/app WORKDIR /usr/src/app RUN npm install --global gulp-cli \ && npm install CMD ["gulp", "watch"]
但是,这不适合我的情况。目标是使用NPM安装项目依赖项,然后运行gulp来构建我的项目。这意味着我需要对项目文件夹具有读写权限, 并且 在容器消失后它必须保留。
卷装入后,我需要做两件事,所以我想出了以下解决方案…
docker / gulp / Dockerfile:
FROM node RUN npm install --global gulp-cli ADD start-gulp.sh . CMD ./start-gulp.sh
docker / gulp / start-gulp.sh:
#!/usr/bin/env bash until cd /usr/src/app && npm install do echo "Retrying npm install" done gulp watch
docker-compose.yml:
因此,现在容器启动了一个bash脚本,该脚本将不断循环直到可以进入目录 并 运行npm install。这仍然很脆弱,但是可以。:)