Ved*_*ic. 2 node.js docker docker-compose
我遇到 gulp 没有创建任何文件的问题。它说已完成,但没有创建文件。如果我使用以下命令登录我的 docker 实例:
docker exec -t -i myservice-service /bin/bash 如果我运行 gulp 命令,那么它会正确创建它
然后创建 gulpfile.js 中定义的所有文件。换句话说,public/dist/ 填充了 main.js 和其他 css 文件。
这是我的 Dockerfile。
FROM node:9
RUN mkdir -p /usr/src/app
RUN mkdir -p /usr/src/logs
WORKDIR /usr/src/app
# GULP Installation
RUN npm install -g gulp
RUN npm install gulp
COPY package*.json /usr/src/app/
COPY .npmrc /usr/src/app/
RUN cd /usr/src/app/ && npm install && npm install -g nodemon
COPY . /usr/src/app
RUN chown -R node:node /usr/src/app && chown -R node:node /usr/src/logs
USER node
EXPOSE 3000
RUN gulp
CMD ["npm", "run-script", "start" ]
Run Code Online (Sandbox Code Playgroud)
这是我的作曲家文件(开发):
version: "3"
services:
myservice-service:
build: .
image: myservice-service
container_name: myservice-service
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
environment:
- NODE_ENV=dev
ports:
- 3000:3000
command: nodemon --delay 2 ./bin/www
Run Code Online (Sandbox Code Playgroud)
我将其运行为:
docker-compose -f docker-compose.development.yml up --build
当我这样运行它时,它不会创建任何文件。当我手动运行命令时,我在屏幕上得到相同的输出。
我花了几个小时试图让它工作,我尝试设置权限等等,但它就是不起作用。
我的期望是让 public/dist/ 填充文件。
任何帮助表示赞赏。
更新。它有效,但我有疑问:
我设法通过在composerfile本身内部使用命令来使其工作。所以就我而言:
命令:bash -c“gulp && nodemon --delay 2 ./bin/www”
根据我的推理,gulp 应该在 Dockerfile 本身内部完成,而不是在 Composer 文件上完成。但话又说回来,这超出了我的知识范围。
小智 5
它Dockerfile在构建时运行,并将本地目录中的所有文件复制到容器中,然后运行 gulp 并创建任何文件。
然后,您将本地文件夹挂载到 docker 容器文件系统上,几乎用原始文件覆盖 docker 文件中所做的操作,因为 gulp 在容器中的文件上运行,它不会影响原始文件,因此您将撤消变化。
解决方案要么按照您在问题中提到的那样进行(将其添加到 incommand或docker-compose.yml通过 运行docker-compose exec),要么编写一个自定义入口点脚本,该脚本将运行 gulp 然后运行命令,如下所示:
bin/入口点.sh
#!/bin/sh
gulp
exec "$@"
Run Code Online (Sandbox Code Playgroud)
Dockerfile
FROM node:9
COPY bin/entrypoint.sh /entrypoint.sh
RUN chmod 755 /entrypoint.sh
RUN mkdir -p /usr/src/app
RUN mkdir -p /usr/src/logs
WORKDIR /usr/src/app
# GULP Installation
RUN npm install -g gulp
RUN npm install gulp
COPY package*.json /usr/src/app/
COPY .npmrc /usr/src/app/
RUN cd /usr/src/app/ && npm install && npm install -g nodemon
COPY . /usr/src/app
RUN chown -R node:node /usr/src/app && chown -R node:node /usr/src/logs
USER node
EXPOSE 3000
ENTRYPOINT ["/entrypoint.sh"]
CMD ["npm", "run-script", "start" ]
Run Code Online (Sandbox Code Playgroud)
这将使您的构建变得不太可预测,因为如果您Dockerfile在开发和生产中使用相同的内容,每次容器启动时(例如每次部署后)它都会运行 gulp 。
| 归档时间: |
|
| 查看次数: |
2088 次 |
| 最近记录: |