Jos*_*ott 4 node.js docker docker-compose
我正在尝试实现一些非常基本的东西,但已经花了几个晚上了,但仍然没有找到可靠的(或任何)解决方案。我在 SO 上找到了一些类似的主题,并遵循了那里的内容,但没有成功,所以我为我的具体案例创建了一个 GitHub 存储库。
我正在尝试做的事情:
docker-compose up -d(我计划将来添加更多容器,本示例中省略)来配置 NodeJS 应用程序volumes,这样我就不必每次在本地更改某些代码时都重新构建。我的猜测是我遇到的问题与volumes导致容器内某些文件丢失/覆盖的映射有关,例如在我尝试过的一些变体中,文件夹被映射,但单个文件没有被映射。
我创建了一个简单的存储库来说明我的问题,只需签出并运行 docker-compose up -d即可查看问题,容器因以下原因而死亡:
Error: Cannot find module '/src/app/app.js'
存储库的链接在这里: https: //github.com/josephmcdermott/nodejs-docker-issue,欢迎 PR,如果有人能为我解决这个问题,我将永远感激不已。
更新:请参阅下面的解决方案代码,感谢 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"]
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
app:
build: .
volumes:
- ./app:/src/app
Run Code Online (Sandbox Code Playgroud)
文件夹结构:
- app
- - * (files I want to sync and regularly update)
- app.js (initial script to call files within app/)
- Dockerfile
- docker-compose.yml
- package.json
Run Code Online (Sandbox Code Playgroud)
在您的撰写文件中,最后一行- /src/app/node_modules可能映射到您之前的卷。如果您挂载/scr/app,则将在该链接卷中创建node_modules。所以它看起来像这样:
app:
build: .
volumes:
- ./app:/src/app
Run Code Online (Sandbox Code Playgroud)
如果您确实希望将整个/app目录保留为链接卷,则需要npm install在启动容器时执行此操作(这将确保它获取任何更新),或者不链接该卷并更新 Dockerfile 以复制整个目录/app目录。这很好,因为它为您提供了一个独立的图像。我通常以这种方式 Dockerize 我的 Node.js 应用程序。您还可以npm test根据需要运行来验证图像。
如果您需要为您希望能够编辑的脚本文件创建链接卷(或者如果您的应用程序产生副作用),您可以通过 Docker 卷仅链接该目录或文件。
顺便说一句,如果您想确保将来不会复制该目录的内容,请将其添加到 . dockerignore(以及 .gitignore)。
| 归档时间: |
|
| 查看次数: |
9553 次 |
| 最近记录: |