gpt4 book ai didi

Docker - 共享卷主机 :container 的问题

转载 作者:行者123 更新时间:2023-12-02 21:26:34 25 4
gpt4 key购买 nike

我正在尝试使用 docker-compose 用于运行多个服务(redis、mongo 和 express 应用程序) .我想让我的主机“连接”到容器,所以修改文件也会修改容器中的文件。

express 应用有它的 Dockerfile 运行 npm install .

当我尝试 docker-compose up ,我收到以下错误:

web_1    | [nodemon] 1.9.2
web_1 | [nodemon] to restart at any time, enter `rs`
web_1 | [nodemon] watching: *.*
web_1 | [nodemon] starting `node server/app.js`
web_1 | module.js:328
web_1 | throw err;
web_1 | ^
web_1 |
web_1 | Error: Cannot find module 'express'
web_1 | at Function.Module._resolveFilename (module.js:326:15)
web_1 | at Function.Module._load (module.js:277:25)
web_1 | at Module.require (module.js:354:17)
web_1 | at require (internal/module.js:12:17)
web_1 | at Object.<anonymous> (/blog/server/app.js:5:15)
web_1 | at Module._compile (module.js:410:26)
web_1 | at Object.Module._extensions..js (module.js:417:10)
web_1 | at Module.load (module.js:344:32)
web_1 | at Function.Module._load (module.js:301:12)
web_1 | at Function.Module.runMain (module.js:442:10)
web_1 | [nodemon] app crashed - waiting for file changes before starting...

它提示 找不到 express 模块 .

检查构建过程是否正确安装了 package.json 中指定的依赖项,我使用/bin/bash 入口点运行容器:
docker run -it --rm --entrypoint /bin/bash image_name

容器内,node_modules文件夹存在 .我也可以运行 nodemon server/app并且快速应用程序运行正常(当然缺少来自其他服务的连接)。

这是 express 应用程序的“Dockerfile”:
FROM node:argon
MAINTAINER xxxxxxxx

# Install globally nodemon
RUN npm install nodemon -g

# Make folder that contains blog
RUN mkdir -p blog

# Set up working directory (from now on we are located inside /blog)
WORKDIR /blog

# Add package
ADD ./package.json /blog

# Install dependencies defined in packaje.json
RUN npm install

# Copy data
ADD ./ /blog

这里是 docker-compose.yml :
version: '2'
services:
db:
image: mongo
ports:
- "27017:27017"

cache:
image: redis
ports:
- "6379:6379"

web:
environment:
NODE_ENV: 'development'
build: .
command: nodemon server/app.js
volumes:
- ./:/blog
ports:
- "8000:8000"
depends_on:
- cache
- db

可能与 VOLUMES 有关吗? .

在我的本地环境中,我没有 node_modules 文件夹。是 volumes我在 docker-compose.yml 中定义的标签隐藏了 node_modules folderdocker-compose built build ?.

最佳答案

在您的 Dockerfile 中,您正在执行以下操作

ADD ./ /blog

这是获取你的本地目录并添加到/blog 的图像,然后 oyu 正在安装你的 npm 包,我假设到同一个/blog 目录。

然后在你的 docker-compose 文件中你说以下内容:
  volumes:
- ./:/blog

这是在您的图像中获取/blog 目录,将其丢弃并替换为您的本地目录。由于您没有在本地计算机上运行 npm install ,因此那里不会有 node_modules 目录,因此当您运行容器时,它不会有 express ,因此会出现错误。

为了解决这个问题,你应该将你的 npm 包存储在/blog 以外的某个地方,也许是全局的,这样你就不必担心这个问题了。

为此,您需要将 dockerfile 从
RUN npm install


RUN npm install -g

这将全局安装您的 npm 模块(在/blog 之外),然后当您运行容器时,它应该可以正常工作。

关于Docker - 共享卷主机 :container 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36990279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com