docker构建中的访问卷

docker构建中的访问卷,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我正在使用docker compose并创建了一个卷。我有多个容器。我面临在docker容器中运行命令的问题。 我有NodeJS容器,它有单独的前端和后端文件夹。我需要在这两个文件夹中运行npm安装 version: '2' services: ### Applications Code Container ############################# applications: image: tianon/true volumes:

我正在使用docker compose并创建了一个卷。我有多个容器。我面临在docker容器中运行命令的问题。 我有NodeJS容器,它有单独的前端和后端文件夹。我需要在这两个文件夹中运行npm安装

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"]
来自节点:6.10
维修员JC Gil
环境术语=xterm
添加script.sh/tmp/
运行chmod 777/tmp/script.sh
运行apt get update&&apt get install-y netcat openbsd
WORKDIR/var/www/html/Backend
运行npm安装
曝光4000
CMD[“/bin/bash”,“/tmp/script.sh”]

我的workdir为空,因为location/var/www/html/Backend在构建时不可用,但在我的所有者启动时可用。因此,我的命令npm install dot work

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

您可以尝试在/tmp/script.sh中添加
npm安装


让我知道

您可能想做的是将
添加
复制
包.json
文件到正确的位置,
运行npm install
,然后
添加
将源代码的其余部分复制到映像中。这样,
docker build
将仅在需要时重新运行
npm install


在单独的容器中运行前端和后端可能会更好,但如果这不是一个选项,则完全可以为每个应用程序运行
ADD package.json
-
运行npm install
-
ADD.
一次。

正如Tomas 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    

这样做,我有前端,banckend和另一个文件夹。所以在所有文件夹和前端bower安装中都有npm安装。每次都需要花费大量的时间来安装容器。