在Docker构build中访问卷

我正在使用docker撰写和我已经创build了一个卷。 我有多个容器。 我面临的问题在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不可用,而build设,但可用时,我conainter是。 所以我的命令npm安装不起作用

你可能想要做的是将package.json文件ADDCOPY到正确的位置, RUN npm install ,然后将其余的源文件ADDCOPY到映像中。 这样, docker build只会在需要的时候重新运行npm install

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

RUN是图像构build步骤,在构build时尚未附加音量。 我想你必须在CMD中执行npm install。

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

让我知道

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

 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