2017-06-08 88 views
0

我正在使用泊坞窗组合构建并创建了一个卷。我有多个容器。我面临着在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  

这是节点

FROM node:6.10 

MAINTAINER JC Gil <[email protected]> 

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等/后端我的码头工人文件不可用,同时建立,但可当我conainter到了。所以我的命令npm install不起作用

回答

0

你可能想要做什么,是ADDCOPYpackage.json文件到正确的位置,RUN npm install,然后将ADDCOPY其余的来源放入图像中。那样,docker build将仅在需要时重新运行npm install

它可能会更好,在不同的容器中运行前端和后端,但如果这不是一种选择,它是完全可行的运行ADD package.json - 为每个应用程序ADD .一次 - RUN npm install

0

RUN是一个映像构建步骤,在构建时尚未连接卷。 我认为你必须在CMD中执行npm install。

你可以尝试添加npm install /tmp/script.sh

里面让我知道

+0

做到了,我有前端,banckend和另一个文件夹。因此,在所有文件夹和前端凉亭安装中都有npm install。每次容器需要很多时间。 – Sandhu

0

As Tomas Lycken提到复制文件,然后运行npm install。我为Frontend和后端分开了容器。最重要的是前端和后端的节点模块。需要将它们创建为服务中的卷,以便在启动容器时可以使用它们。

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