Docker使用NodeJS应用程序组合卷映射

我正在努力实现一些令人难以置信的基本的东西,但是现在已经进行了几个晚上,并且还没有find一个坚实的(或任何)解决scheme。 我在SO上发现了一些类似的主题,并且遵循了那里的内容,但无济于事,所以我为我的具体情况创build了一个GitHub回购。

我在做什么:

  • 能够使用docker-compose up -d来configurationNodeJS应用程序(我计划在将来添加更多的容器,在本例中省略)
  • 确保代码是通过volumes来映射的,所以我不必每次在本地对某些代码进行更改时重新构build代码。

我的猜测是我遇到的问题是与volumes的映射造成一些文件丢失/容器内覆盖,例如在一些变化我试过文件夹被映射,但个别文件是不。

我已经创build了一个简单的回购来说明我的问题,只是结帐,并运行docker-compose up -d来查看问题,容器因以下原因死亡:

Error: Cannot find module '/src/app/app.js'

回购的链接在这里: https : //github.com/josephmcdermott/nodejs-docker-issue,PR的欢迎,如果有人能解决这个问题,我会永远感激。

更新:请参阅下面的解决scheme代码,亲切感谢ldg

Dockerfile

 FROM node:4.4.7 RUN mkdir -p /src COPY . /src WORKDIR /src RUN npm install EXPOSE 3000 CMD ["node", "/src/app.js"] 

泊坞窗,compose.yml

 app: build: . volumes: - ./app:/src/app 

文件夹结构:

 - app - - * (files I want to sync and regularly update) - app.js (initial script to call files within app/) - Dockerfile - docker-compose.yml - package.json 

在您的撰写文件中,最后一行- /src/app/node_modules可能映射到您之前的卷。 如果挂载/ scr / app,那么node_modules将在该链接的卷中创build。 所以它看起来像这样:

 app: build: . volumes: - ./app:/src/app 

如果你想把你的整个/app目录保存为一个链接的卷,你需要在启动容器的时候进行npm install (这样可以保证它能够获得更新)或者不要链接卷并更新你的Dockerfile复制整个/app目录。 这很好,因为它给你一个独立的图像。 我通常以这种方式Dockerize我的Node.js应用程序。 您也可以根据需要运行npm test来validation映像。

如果您需要为要编辑的脚本文件创build链接的卷(或者如果您的应用程序产生副作用),则可以通过Docker卷链接该目录或文件。

顺便说一句,如果你想确保你没有复制该目录的内容将来,将其添加到。 dockerignore (以及.gitignore)。