我已经对node.js应用程序进行了docker化,并创建了一个docker-compose文件与mongo一起运行。我正在使用docker进行开发,因此出于这个原因,我需要使用nodemon。
这是我的Dockerfile:
FROM node:carbon-alpine
RUN mkdir -p usr/src/app
WORKDIR /usr/src/app
RUN npm install -g nodemon
COPY package*.json /usr/src/app
RUN yarn install
COPY . /usr/src/app
EXPOSE 3000
CMD [ "yarn", "start-local" ]
这是docker-compose
version: "3"
services:
app:
container_name: app
restart: always
build: .
volumes:
- .:/usr/src/app
environment:
- MONGO_URI=mongodb://mongo:27017/test
ports:
- "3000:3000"
depends_on:
- mongo
networks:
app_net:
mongo:
container_name: app-mongo
image: mongo:3.6.6-jessie
volumes:
- ./data:/data/db
networks:
app_net:
aliases:
- mongo
networks:
app_net:
运行docker-compose up
时出现错误/bin/sh: nodemon: not found
。当我运行不带compose
的单个容器时,一切正常。 docker-compose definition
怎么了?
答案 0 :(得分:3)
我认为您的问题可能是您的主机上没有安装node_modules。因此,当您通过docker-compose卷映射主机和容器文件系统时,主机将覆盖容器的node_modules文件夹。
为了避免您应该忽略该文件夹,如下所示:
version: "3"
services:
app:
container_name: app
restart: always
build: .
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules/
environment:
- MONGO_URI=mongodb://mongo:27017/test
ports:
- "3000:3000"
depends_on:
- mongo
networks:
app_net:
mongo:
container_name: app-mongo
image: mongo:3.6.6-jessie
volumes:
- ./data:/data/db
networks:
app_net:
aliases:
- mongo
networks:
app_net:
希望它会有所帮助:)