Node.js Docker容器中的Nodemon
我无法在docker容器中运行nodemon。下面是我得到的错误:Node.js Docker容器中的Nodemon,node.js,docker,docker-compose,nestjs,Node.js,Docker,Docker Compose,Nestjs,我无法在docker容器中运行nodemon。下面是我得到的错误:[nodemon]内部监视失败:eNOPC:达到文件监视程序数量的系统限制,监视'/usr/src/app/dist' 这是我的图像文件: ## Use specific version of node FROM node:10.16 ## Get anything we may need for our container and run updates RUN apt-get update -qq && ap
[nodemon]内部监视失败:eNOPC:达到文件监视程序数量的系统限制,监视'/usr/src/app/dist'
这是我的图像文件:
## Use specific version of node
FROM node:10.16
## Get anything we may need for our container and run updates
RUN apt-get update -qq && apt-get install -y build-essential
## CREATE DIRECTORY
WORKDIR /usr/src/app
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package.json ./
COPY yarn.lock ./
## Install packages
RUN yarn install
# BUNDLE APP SOURCE
COPY . .
# EXPOSE TARGET PORT
EXPOSE 3001
CMD ["yarn", "start:dev"]
以下是本文的主要内容:
build: ./server/
volumes:
- ./server/:/usr/src/app
- /usr/src/app/node_modules
ports:
- "3001:3001"
restart: always
depends_on:
- db
下面是开始:dev:
cross-env NODE\u env=development tsc watch-p tsconfig.build.json--onSuccess\“nodemon dist/main.js\”
我已经尝试增加文件监视程序的限制,比如soecho fs.inotify.max_user_watches=524288 | sudo tee-a/etc/sysctl.conf&&sudo sysctl-p
,但我还没有找到一种方法(在compose/Dockerfile中似乎不可能这样做)
docker容器统计数据
正常:
R ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
4050a37b3352 server 8.87% 324.6MiB / 15.57GiB 2.04% 79.1kB / 6.87kB 48MB / 1.26MB 50
这里是docker容器内的ps aux
:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 760916 57112 ? Ssl 03:24 0:00 node /opt/yarn-v1.17.3/bin/yarn.js start:dev
root 29 0.0 0.0 4280 488 ? S 03:24 0:00 /bin/sh -c cross-env NODE_ENV=development tsc-watch -p tsconfig.build.json --onSuccess "nodemon dist/main.js"
root 30 0.0 0.1 561684 21880 ? Sl 03:24 0:00 /usr/local/bin/node /usr/src/app/node_modules/.bin/cross-env NODE_ENV=development tsc-watch -p tsconfig.build.json --onSuccess nodemon dist/
root 37 0.0 0.1 561768 23564 ? Sl 03:24 0:00 /usr/local/bin/node /usr/src/app/node_modules/.bin/tsc-watch -p tsconfig.build.json --onSuccess nodemon dist/main.js
root 46 12.9 1.2 781216 196912 ? Sl 03:24 2:09 /usr/local/bin/node /usr/src/app/node_modules/typescript/bin/tsc -p tsconfig.build.json --watch
root 70 0.0 0.0 0 0 ? Z 03:24 0:00 [sh] <defunct>
root 71 0.3 0.5 765520 96992 ? Sl 03:24 0:03 /usr/local/bin/node dist/main dist/main.js
root 82 0.0 0.0 18180 2924 pts/0 Ss+ 03:25 0:00 bash
root 92 6.0 0.0 18180 3064 pts/1 Ss 03:40 0:00 bash
root 99 0.0 0.0 36632 2828 pts/1 R+ 03:40 0:00 ps aux
USER PID%CPU%MEM VSZ RSS TTY STAT START TIME命令
根1 0.0 0.3 760916 57112?ssl03:24 0:00节点/opt/warn-v1.17.3/bin/warn.js开始:dev
根29 0.0 0.0 4280 488?S 03:24 0:00/bin/sh-c cross-env NODE_env=development tsc watch-p tsconfig.build.json--onSuccess“nodemon dist/main.js”
根30 0.0 0.1 561684 21880?Sl 03:24 0:00/usr/local/bin/node/usr/src/app/node_modules/.bin/cross-env node_env=development tsc watch-p tsconfig.build.json--onSuccess nodemon dist/
根37 0.0 0.1 561768 23564?Sl 03:24 0:00/usr/local/bin/node/usr/src/app/node_modules/.bin/tsc watch-p tsconfig.build.json--onSuccess nodemon dist/main.js
根46 12.9 1.2 781216 196912?Sl 03:24 2:09/usr/local/bin/node/usr/src/app/node_modules/typescript/bin/tsc-p tsconfig.build.json——监视
根70 0.0 0.0?Z 03:24 0:00[上海]
根71 0.3 0.5 765520 96992?Sl 03:24 0:03/usr/local/bin/node dist/main dist/main.js
根82 0.0 0.0 18180 2924分/0 Ss+03:25 0:00 bash
根92 6.0 0.0 18180 3064分/1 Ss 03:40 0:00 bash
根99 0.0 0.0 36632 2828分/1 R+03:40 0:00 ps辅助
如@Mihae所述,这将减慢您的开发速度,但出于学习目的,您需要修改dockerfile,因为这样的操作需要特权
模式,并且仅在容器启动时可用,您可以在构建时修改它们
## Use specific version of node
FROM node:10.16
## Get anything we may need for our container and run updates
RUN apt-get update -qq && apt-get install -y build-essential
## Install packages
RUN yarn install
#creating entrypoint script with some debug log you can remove after debuging
RUN echo "#!/bin/sh \n\
echo "fs.inotify.max_user_watches before update" \n\
cat /etc/sysctl.conf\n\
echo "______________________updating inotify __________________________" \n\
echo fs.inotify.max_user_watches=524288 | tee -a /etc/sysctl.conf && sysctl -p \n\
echo "updated value is" \n\
cat /etc/sysctl.conf | grep fs.inotify \n\
exec yarn start:dev \
" >> /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# EXPOSE TARGET PORT
EXPOSE 3001
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
建造:
docker build -t myimage .
现在,不要忘记传递--privileged
,这是fs.inotify.max\u user\u监视
更改其值所必需的
docker run --privileged -ti myimage
您不需要查看它的静态文件,服务器也不需要在这种情况下重新启动changes@Adiiidist不是一个静态文件,它由tsc watch监视,并在更改后重新编译如果我没有错,ng build之后我们得到了dist
dist
,我们不处理dist,但它已生成?@adii我不确定我是否理解。我没有在任何地方运行ng build。您可能会找到解决方案,但您很快就会意识到docker大大降低了开发速度。Docker非常适合发布应用程序,并在不同的上下文中一致地运行它们。但说到开发,我建议您在主机上进行开发,而不要考虑Docker。您的问题是docker machine(docker实际运行的底层虚拟机)。如果我是对的,你需要更改那里的设置,你不能只使用Dockerfile。谢谢你的回答。我一会儿就试试看!:)很高兴,如果有任何问题,请告诉我:)