Docker – 覆盖链接的卷的内容

有简单的Node.js泊坞窗容器

泊坞窗,compose.yml:

app: build: ./dockerfiles/app volumes: - /Users/home/work/app:/usr/app 

Dockerfile:

 FROM node:6.7-slim COPY package.json /tmp RUN cd /tmp && npm install RUN mkdir -p /usr/app WORKDIR /usr/app CMD ["node", "./src/app.js"] 

我想要实现的是我有package.json和安装节点模块(npm install)的容器。 部分我复制package.json和容器内安装模块是非常直接的,但是当我想要在链接的应用程序中使用这些node_modules问题发生。 我找不到任何方法,如何将/ tmp / node_modules复制到/ usr / app / node_modules

有没有Docker的方法可以做到这一点? 如果没有,我可以告诉我的节点应用程序寻找node_modules比在根目录以外的地方?

你可以通过在Dockerfile或docker-compose.yml文件中更改启动容器时使用的CMD来达到你想要docker-compose.yml

你只需要做两件事情,而不是刚刚启动node ./src/app.js

  1. 复制node_modules
  2. 开始节点

使用docker-compose.yml ,我会执行以下操作:

 app: build: ./dockerfiles/app volumes: - /Users/home/work/app:/usr/app command: > bash -c " rm -rf /usr/app/node_modules && cp -R /tmp/node_modules /usr/app/node_modules && node ./src/app.js " 

这将删除已映射卷上的现有节点模块,然后复制容器中的节点模块,最后启动节点应用程序。 每当容器启动时都会发生这种情况。

帮助我的东西是关于卷的使用

 volumes: - ${APP_PATH}:/usr/app # Empty node_modules directory - /usr/app/node_modules 

然后在Dockerfile中:

 FROM node # Node modules COPY *.json /tmp/ RUN cd /tmp && yarn ENV NODE_PATH /tmp/node_modules:${NODE_PATH} # App RUN mkdir -p /usr/app WORKDIR /usr/app ENV NODE_ENV docker CMD ["run-node", "src/app.js"] 

这使我有另一个目录中的node_modules和应用程序将在那里寻找他们。