我正在使用docker compose,我创建了一个卷。我有多个容器。我在docker容器中运行命令时遇到问题。 我有节点js容器,它有独立的前端和后端文件夹。我需要在两个文件夹中运行npm install。
version: '2'
services:
### Applications Code Container #############################
applications:
image: tianon/true
volumes:
- ${APPLICATION}:/var/www/html
node:
build:
context: ./node
volumes_from:
- applications
ports:
- "4000:30001"
networks:
- frontend
- backend
这是我的节点
的docker文件FROM node:6.10
MAINTAINER JC Gil <sensukho@gmail.com>
ENV TERM=xterm
ADD script.sh /tmp/
RUN chmod 777 /tmp/script.sh
RUN apt-get update && apt-get install -y netcat-openbsd
WORKDIR /var/www/html/Backend
RUN npm install
EXPOSE 4000
CMD ["/bin/bash", "/tmp/script.sh"]
我的workdir是空的,因为位置/ var / www / html / Backend在构建时不可用,但是当我使用时,可用。所以我的命令npm install不起作用
答案 0 :(得分:1)
您可能想要做的是ADD
或COPY
package.json
个文件到正确的位置,RUN npm install
,然后是ADD
或{{ 1}}其余的源进入图像。这样,COPY
只会在需要时重新运行docker build
。
在单独的容器中运行前端和后端可能会更好,但如果这不是一个选项,那么运行npm install
- ADD package.json
- {是完全可行的{1}}每次申请一次。
答案 1 :(得分:0)
RUN是一个图像构建步骤,在构建时尚未附加卷。 我想你必须在CMD中执行npm install。
您可以尝试在/tmp/script.sh
中添加npm install
让我知道
答案 2 :(得分:0)
Asmas Lycken提到复制文件然后运行npm install。我为前端和后端分隔了容器。最重要的是前端和后端的节点模块。需要在服务中将它们创建为卷,以便在我们启动容器时它们可用。
version: '2'
services:
### Applications Code Container #############################
applications:
image: tianon/true
volumes:
- ${APPLICATION}:/var/www/html
- ${BACKEND}:/var/www/html/Backend
- ${FRONTEND}:/var/www/html/Frontend
apache:
build:
context: ./apache2
volumes_from:
- applications
volumes:
- ${APACHE_HOST_LOG_PATH}:/var/log/apache2
- ./apache2/sites:/etc/apache2/sites-available
- /var/www/html/Frontend/node_modules
- /var/www/html/Frontend/bower_components
- /var/www/html/Frontend/dist
ports:
- "${APACHE_HOST_HTTP_PORT}:80"
- "${APACHE_HOST_HTTPS_PORT}:443"
networks:
- frontend
- backend
node:
build:
context: ./node
ports:
- "4000:4000"
volumes_from:
- applications
volumes:
- /var/www/html/Backend/node_modules
networks:
- frontend
- backend