在docker build中访问卷

时间:2017-06-08 03:08:58

标签: docker docker-compose dockerfile

我正在使用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不起作用

3 个答案:

答案 0 :(得分:1)

您可能想要做的是ADDCOPY 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