【问题标题】:Access volume in docker builddocker build 中的访问卷
【发布时间】:2017-11-09 14:16:02
【问题描述】:

我正在使用 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"]

我的工作目录是空的,因为位置 /var/www/html/Backend 在构建时不可用,但在我启动时可用。所以我的命令 npm install 不起作用

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      告诉我

      【讨论】:

      • 完成了,我有前端、银行和另一个文件夹。所以在所有文件夹和前端凉亭安装中都有 npm install。每次启动容器都需要很长时间。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-14
        • 1970-01-01
        • 2017-05-08
        • 1970-01-01
        • 2019-08-23
        • 1970-01-01
        • 2022-10-14
        相关资源
        最近更新 更多